OpenID 身份验证本质上是基于浏览器的。如果我想允许 OpenID 用户针对 API 进行身份验证以在替代客户端中使用,是否有公认的最佳实践?
例如,如果用户尝试使用他们的 OpenID 登录 iPhone 应用程序,那将如何工作?我能想到的唯一一件事就是为他们生成某种 API 令牌并让用户在某处手动输入它。这种方法对用户不友好。
这就是像Basecamp这样的网站的工作方式,但对我来说仍然很笨拙。
OpenID 身份验证本质上是基于浏览器的。如果我想允许 OpenID 用户针对 API 进行身份验证以在替代客户端中使用,是否有公认的最佳实践?
例如,如果用户尝试使用他们的 OpenID 登录 iPhone 应用程序,那将如何工作?我能想到的唯一一件事就是为他们生成某种 API 令牌并让用户在某处手动输入它。这种方法对用户不友好。
这就是像Basecamp这样的网站的工作方式,但对我来说仍然很笨拙。
您看到的问题并不是 OpenID 独有的。任何无密码身份验证方案都可能存在此问题。OAuth ( http://oauth.net/ ) 是一个开放标准的解决方案,在许多网站上迅速获得关注。它完全独立于用户的身份验证方式,因此他们的 OpenID 提供者不需要支持甚至不需要知道您的站点(OAuth 术语中的“服务提供者”)正在使用 OAuth。您的 API 客户端可以是基于 Web 的,甚至可以是本地应用程序!
该过程将是这样的:
角色:
流动:
显然,我不能在此处包含整个 OAuth 规范,但是您可以从上面看到,这应该可以解决您的问题。OAuth 库的存在是为了轻松添加对它的支持。
如果您碰巧使用 ASP.NET,我建议http://dotnetopenid.googlecode.com/因为它最近添加了 OAuth 支持(v3.0 beta 1)。
OpenID 和 OAuth 都没有定义用户如何进行身份验证。它们定义了消费者如何将用户代理引导到身份验证提供者,如何将用户代理返回,以及消费者如何验证用户通过身份验证的身份。
用于认证的实际方法对于这两种方案都是带外的。
OpenID 和 OAuth 之间存在差异,但两者都要求消费者使用 HTTP 重定向和回调 URL。它们都是基于浏览器的。如果您的应用程序使用 HTTP,它可以做到。但是,要点是用户只是将凭据输入到受信任的应用程序中。
OpenID 无法实现您想要的。OpenID 的前提是您(iPhone 应用程序)只想了解您的用户,即他们的 OpenID 提供者信任他们。他们从不向您证明自己。
实际上,优秀的 OpenID 提供者甚至会阻止您调解身份验证过程(因为这会使用户面临可能的攻击 - 由您发起!):他们要求用户直接使用他们登录并拒绝通过推荐登录。