OpenID认证和API访问

16

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

例如,如果用户试图使用其OpenID登录iPhone应用程序,那么该怎么办呢?我能想到的唯一方法是为他们生成某种API令牌,并让用户手动输入到某个地方。这种方法不太用户友好。

Basecamp这样的站点就是这种方式工作的,但我仍然觉得它很笨重。

4个回答

16
你看到的问题并不是OpenID所特有的,任何无密码身份验证方案都可能存在此问题。OAuth(http://oauth.net/)是一个解决方案,它是一个开放标准,正在许多网站上快速获得广泛应用。它完全独立于用户身份验证的方式,因此他们的OpenID提供者不需要支持或甚至意识到你的网站(OAuth术语中的“服务提供者”)正在使用OAuth。你的API客户端可以是基于Web的,也可以是本地应用程序!
流程如下:
角色:
- 用户:拥有你的网站账户的人。 - 服务提供者:你的网站,具有需要一些凭据才能访问的可编程API。 - 消费者:需要访问服务提供程序API的客户端,无论是Web还是本地应用程序。
步骤:
- 用户位于消费者处。他表示他想要访问服务提供商的数据。 - 用户被重定向(如果消费者是网站)或浏览器被弹出(如果消费者是本地应用程序),用户看到服务提供商网站。 - 用户已经通过持久Cookie登录到服务提供商,或者用户必须首先以任何方式登录到服务提供商(在你的情况下是OpenID)。 - 服务提供商然后询问用户:“消费者(某个消费者)想要访问您的数据(或我们的API等等)。你想授权吗?(是/否) - 用户确认后,浏览器窗口关闭或重定向回消费者网站。 - 通过OAuth协议的某些神奇操作,消费者现在拥有一个秘密凭据,可以用来访问你的API并访问您刚才授权的任何用户私人信息。
显然我不能在这里包含整个OAuth规范,但你可以从上面看到,这应该解决你的问题。 OAuth库存在使添加对它的支持变得容易。如果你正在使用ASP.NET,我建议使用http://dotnetopenid.googlecode.com/,因为它最近添加了OAuth支持(v3.0 beta 1)。

我正在寻找与您提供的解释相同类型的内容,您的答案有很大的改进,但是我最缺乏信息的地方在于第5和6之间。您的“OAuth协议魔法”并没有帮助我很多:p 您是否可以给我(我们?)更多关于魔法发生的详细信息以及如何确保未经信任的消费者已经登录了官方用户的RESTful服务器?非常感谢! - Cyril N.
“OAuth magic”的处理可以通过一个好的OAuth库或者阅读规范并自己实现来完成,简而言之,消费方向服务提供方发送一个带有“验证器代码”的最终请求,作为回报,服务提供方会向消费方发送一个“访问令牌”,以便于其用于签署后续的授权请求。 - Andrew Arnott

4
OpenID和OAuth都没有规定用户如何进行身份验证,它们定义的是消费者如何将用户代理指向认证提供者,如何将用户代理重定向回来以及消费者如何验证用户所认证的身份。
实际用于身份验证的方法对于这两种方案都是独立的。
OpenID和OAuth之间存在差异,但两者都要求消费者使用HTTP重定向和回调URL。它们都是基于浏览器的。如果您的应用程序支持HTTP,则可以使用任一方案。然而,一个主要的点是用户只需在受信任的应用程序中输入凭据。

2
您想要的无法通过OpenID实现。OpenID基于这样的前提:您(iPhone应用程序)只想知道关于您的用户,他们的OpenID提供者信任他们。他们从不向您进行身份验证。
事实上,好的OpenID提供者甚至会防止您介入认证过程(因为这可能会暴露用户受到攻击的可能性-由您引起!):他们要求用户直接登录并拒绝通过引荐登录。

这是不准确的。OpenID 是关于用户身份验证的 - 它并不排除其他身份验证/授权方式来访问 API。这就是 OAuth 的全部内容。 - Andrew Arnott
1
我只是在回答这个问题:“如果我想允许一个OpenID用户对API进行身份验证,以便在其他客户端中使用…”——这是你无法控制的:提供者控制交互模式,而不是使用方。你在自己的解决方案中也说了这点… - yungchin

1

请参见:相关问题

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

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


假设用户已经在我们这里设置了一个账户,我可以将OAuth用作OpenID消费者吗?还是必须由提供方支持它? - Alex Wayne
在OpenID中有两个角色:“OpenID提供者”和“依赖方”。 在OAuth中有两个角色:“服务提供者”和“消费者”。 这很令人困惑,因为在OpenID 1.1中,依赖方曾经被称为消费者。 无论如何,OP提供者不需要支持OAuth。请参见我的答案。 - Andrew Arnott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接