OAuth 2是否为给定用户指定永久标识符?

时间:2012-05-20 12:04:08

标签: oauth openid federated-identity

我正在(重新)阅读Rob Conery的2010年博客文章OpenID is a Nightmare,作为对OpenID / OpenAuth的一些研究的一部分。理想情况下,我希望使用链接到单个帐户的多个OAuth提供商,以提供针对提供商不可用的弹性 - 使用Facebook登录,链接您的Twitter和Google帐户,以及下次访问Facebook时登录isn&# 39;工作并不重要,你可以使用Twitter或谷歌进入并访问你的东西 - 就像在现实世界中,你可以用护照打开一个银行账户,然后用你的钱取钱如果您的护照不可用,则获得驾驶执照。

Rob在他的文章中主要关注的一个问题是,无法始终如一地识别使用OpenID的用户 - 有人可能有一天会在Google上登录,购买产品,然后几天后返回并登录Google并无法访问他们购买的产品,因为没有唯一标识符可以保证在两次Google身份验证调用之间保持一致。

我很好奇这是否已在OAuth 2.0中得到解决 - 要么通过协议规范明确解决,要么通过主要提供商之间的某些实现共识来解决。哪个字段 - 如果有的话 - 我可以依靠不改变用户与特定OAuth提供商的关系的生命周期吗?

2 个答案:

答案 0 :(得分:2)

作为OAuth2 for login流程的一部分,Google提供了一个TokenInfo端点,用于验证并提供有关此流程早期获得的access_token的信息。

令牌信息包括userid

  

“此字段的值是登录用户的不可变标识符,可以在应用程序中创建和管理用户会话时使用。无论client_id如何,此标识符都相同。这提供了关联的能力在同一组织中跨多个应用程序的个人资料信息。“

听起来就像票(或许是令牌)!

userid仅在访问令牌请求中包含https://www.googleapis.com/auth/userinfo.profile范围时才会出现,因此请不要忘记。

同样,在Facebook API中,一旦获得了访问令牌,就可以访问图形API,您可以在其中获取用户数据,包括ID。

Twitter在访问令牌响应中包含user_id作为其authentication API

的一部分

如果您在.NET项目中使用OAuth,这可能很有用......我今天发现WebMatrix 2 Beta包括适用于Facebook,Twitter,Windows Live,Google和Yahoo的OAuth2客户端,可以从一个MVC项目。我被告知你只需要WebMatrix.Security.dll而且你很高兴。它安装在C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies中。虽然它处于测试版并隐藏起来,但它是一种很好的入门方式,可能会使DotNetOpenAuth库的学习曲线不那么陡峭。

答案 1 :(得分:1)

OAuth 2.0无法解决此问题 - 它不是身份/ SSO协议。

但是,OpenID Connect(基于OAuth 2.0构建)是。您可能会很幸运并通过OpenID Connect(see here - 取决于范围)获取用户的电子邮件地址,或者您可以获得PPID,这对于a given relying party应该是唯一的。无论哪种方式 - 应该是可能的。

或者,可以使用SAML。它支持许多不同类型的用户标识符。