OpenID身份验证本质上是基于浏览器的。如果我想允许OpenID用户对API进行身份验证以便在备用客户端中使用,那么是否有可接受的最佳实践?
因此,如果用户尝试使用他们的OpenID登录到iPhone应用程序,那么它将如何工作?我唯一可以考虑为它们生成某种类型的API令牌,并让用户手动在某处输入它。这种方法不是用户友好的。
这就像Basecamp这样的网站有效,但对我来说仍然很笨拙。
答案 0 :(得分:16)
您所看到的问题并非OpenID独有。任何无密码身份验证方案都可能出现此问题。 OAuth(http://oauth.net/)是一个开放标准的解决方案,很快就会在很多网站上获得关注。它完全独立于用户的身份验证方式,因此他们的OpenID提供商不需要支持甚至意识到您的网站(OAuth条款中的“服务提供商”)正在使用OAuth。您的API客户端可以是基于Web的,甚至是本地应用程序!
这个过程是这样的:
角色:
流速:
显然我不能在这里包含整个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。或者,您可以为一些较大的站点手动编写身份验证代码。