16

OpenID 身份验证本质上是基于浏览器的。如果我想允许 OpenID 用户针对 API 进行身份验证以在替代客户端中使用,是否有公认的最佳实践?

例如,如果用户尝试使用他们的 OpenID 登录 iPhone 应用程序,那将如何工作?我能想到的唯一一件事就是为他们生成某种 API 令牌并让用户在某处手动输入它。这种方法对用户不友好。

这就是像Basecamp这样的网站的工作方式,但对我来说仍然很笨拙。

4

4 回答 4

16

您看到的问题并不是 OpenID 独有的。任何无密码身份验证方案都可能存在此问题。OAuth ( http://oauth.net/ ) 是一个开放标准的解决方案,在许多网站上迅速获得关注。它完全独立于用户的身份验证方式,因此他们的 OpenID 提供者不需要支持甚至不需要知道您的站点(OAuth 术语中的“服务提供者”)正在使用 OAuth。您的 API 客户端可以是基于 Web 的,甚至可以是本地应用程序!

该过程将是这样的:

角色:

  • 用户:拥有您网站帐户的人。
  • 服务提供商:您的网站,它有一个程序化 API,需要一些凭据才能访问。
  • 消费者:需要访问服务提供者 API 的客户端,无论是 Web 还是本地应用程序。

流动:

  1. 用户是消费者。他表示他想访问服务提供商的数据。
  2. 用户要么被重定向(如果消费者是网站),要么浏览器被弹出(如果消费者是本地应用程序)并且用户看到服务提供商网站。
  3. 用户要么已经通过持久性 cookie 登录到服务提供者,要么用户必须先登录到服务提供者,但是已经完成(在你的情况下是 OpenID)。
  4. 服务提供者然后询问用户:“消费者(某些消费者)想要访问您的数据(或我们的 API 或其他)。您要授权吗?(是/否)
  5. 用户确认,浏览器窗口关闭或被重定向回消费者站点。
  6. 通过一些 OAuth 协议魔法,消费者现在拥有一个秘密凭证,它可以使用它来访问您的 API 并访问您刚刚授权的任何用户私有信息。

显然,我不能在此处包含整个 OAuth 规范,但是您可以从上面看到,这应该可以解决您的问题。OAuth 库的存在是为了轻松添加对它的支持。

如果您碰巧使用 ASP.NET,我建议http://dotnetopenid.googlecode.com/因为它最近添加了 OAuth 支持(v3.0 beta 1)。

于 2009-02-17T03:50:08.607 回答
4

OpenID 和 OAuth 都没有定义用户如何进行身份验证。它们定义了消费者如何将用户代理引导到身份验证提供者,如何将用户代理返回,以及消费者如何验证用户通过身份验证的身份。

用于认证的实际方法对于这两种方案都是带外的。

OpenID 和 OAuth 之间存在差异,但两者都要求消费者使用 HTTP 重定向和回调 URL。它们都是基于浏览器的。如果您的应用程序使用 HTTP,它可以做到。但是,要点是用户只是将凭据输入到受信任的应用程序中。

于 2009-08-26T21:28:59.177 回答
2

OpenID 无法实现您想要的。OpenID 的前提是您(iPhone 应用程序)只想了解您的用户,即他们的 OpenID 提供者信任他们。他们从不向您证明自己。

实际上,优秀的 OpenID 提供者甚至会阻止您调解身份验证过程(因为这会使用户面临可能的攻击 - 由您发起!):他们要求用户直接使用他们登录并拒绝通过推荐登录。

于 2009-02-13T01:52:54.130 回答
1

请参阅:此相关问题

问题是 openid 规范没有与提供者进行身份验证的标准规定,因此提供者可以选择通过电话或其他方式进行身份验证。

希望更多的供应商接受 OAuth。或者,您可以为一些较大的站点手动编写身份验证代码。

于 2009-02-13T01:41:17.353 回答