OpenID身份验证和API访问

时间:2009-02-13 01:36:18

标签: api authentication openid

OpenID身份验证本质上是基于浏览器的。如果我想允许OpenID用户对API进行身份验证以便在备用客户端中使用,那么是否有可接受的最佳实践?

因此,如果用户尝试使用他们的OpenID登录到iPhone应用程序,那么它将如何工作?我唯一可以考虑为它们生成某种类型的API令牌,并让用户手动在某处输入它。这种方法不是用户友好的。

这就像Basecamp这样的网站有效,但对我来说仍然很笨拙。

4 个答案:

答案 0 :(得分:16)

您所看到的问题并非OpenID独有。任何无密码身份验证方案都可能出现此问题。 OAuth(http://oauth.net/)是一个开放标准的解决方案,很快就会在很多网站上获得关注。它完全独立于用户的身份验证方式,因此他们的OpenID提供商需要支持甚至意识到您的网站(OAuth条款中的“服务提供商”)正在使用OAuth。您的API客户端可以是基于Web的,甚至是本地应用程序!

这个过程是这样的:

角色:

  • 用户:在您的网站上拥有帐户的人。
  • 服务提供商:您的网站,其中包含一个程序化API,需要一些凭据才能访问。
  • consumer:客户端,无论是Web应用程序还是本地应用程序,都需要访问服务提供商的API。

流速:

  1. 用户在消费者处。他表示他想要在服务提供商处访问数据。
  2. 重定向用户(如果消费者是网站)或弹出浏览器(如果消费者是本地应用程序)并且用户看到服务提供商网站。
  3. 用户已经通过持久性cookie登录到服务提供者,或者用户必须首先登录服务提供者,但这已经完成(在您的情况下为OpenID)。
  4. 服务提供商然后询问用户:“消费者(某些消费者)想要访问您的数据(或我们的API,或其他什么)。您要授权吗?(是/否)
  5. 用户确认,浏览器窗口关闭或重定向回消费者网站。
  6. 通过一些OAuth协议魔术,消费者现在拥有一个秘密凭证,可用于访问您的API并访问您刚刚授权的任何用户私人信息。
  7. 显然我不能在这里包含整个OAuth规范,但是你可以从上面看到这可以解决你的问题。存在OAuth库以便于添加对它的支持。

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

答案 1 :(得分:4)

OpenID和OAuth都不定义用户的身份验证方式。它们定义了使用者如何将用户代理定向到身份验证提供程序,如何定向用户代理以及消费者如何验证用户身份验证的身份。

用于身份验证的实际方法对于两种方案都是带外的。

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

答案 2 :(得分:2)

使用OpenID无法实现您的目标。 OpenID基于这样的前提:您(iPhone应用程序)只想知道他们的OpenID提供商信任他们的用户。他们从不向你证明自己。

好的OpenID提供商实际上甚至prevent你调解身份验证过程(因为这会让用户受到可能的攻击 - 由你!):他们要求用户直接登录并拒绝登录-referral。

答案 3 :(得分:1)

请参阅:此related question

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

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