OpenID:标识符URL是唯一的吗?标识符之间有什么区别

时间:2010-07-15 22:21:43

标签: openid google-openid

OpenID specs中,它说:

  
      
  • 标识符:
  •   
     

标识符只是一个URL。 OpenID身份验证协议的整个流程是关于证明最终用户拥有URL。

     
      
  • 声明的标识符:
  •   
     

最终用户表示他们拥有的标识符,但尚未经过消费者验证。

     
      
  • 已验证的标识符:
  •   
     

最终用户向其所拥有的消费者证明的标识符。

     
      
  • 身份提供商:
  •   
     

也称为“IdP”或“服务器”。这是消费者联系的OpenID身份验证服务器,用于最终用户拥有声明的标识符的加密证明。   最终用户如何向其身份提供商进行身份验证超出了OpenID Authenticait的范围。

  • 标识符网址是唯一的吗?究竟是什么?

  • 如果它不是唯一的,那么是否有任何唯一的消费者可以在同一个OpenID端点URL上的不同用户之间有所不同?

  • IdP和标识符网址之间有什么区别?

在其他地方,我读过“OpenID端点URL”一词。

  • OpenID端点URL是否与IdP相同?那么IdP也是一个URL?

我们以Googles OpenID为例。当某个站点要求我进行OpenID登录时,我使用OpenID URL https://www.google.com/accounts/o8/id。那是标识符URL吗?如果是这样,那显然不是唯一的。通常,当我在该网站上的帐户设置中查看我的OpenID登录信息时,它不会显示输入的网址,但它已将其扩展为https://www.google.com/accounts/o8/id?id=AltOawk...。该URL现在看起来很独特。

  • https://www.google.com/accounts/o8/id现在的目的是什么?那是OpenID端点URL吗?或者是IdP URL(如果有不同之处)?

  • https://www.google.com/accounts/o8/id?id=AltOawk...的目的是什么?对于我的 Google帐户,这是否真的独一无二且总是一样的?那个URL是什么标识我?

  • 为什么他们没有使用https://www.google.com/accounts/o8/id?u={google-username}代替这个神秘的...?id=AltOawk...

  • Google的标识符网址是什么?

  • 什么是OpenID端点URL? (什么是IdP网址?)

我问的原因是因为我正在尝试实现自己的OpenID端点。

  • OpenID端点URL是否与标识符URL相同?

在我的OpenID端点实现中,我确实存在这个问题,它在不同用户之间无法区分。消费者网站只是将该OpenID端点上的所有用户都视为相同。当然,它始终是相同的OpenID URL,但Googles OpenID也是如此。

  • 如果最终用户使用此“常规”URL,如何在OpenID端点实现中将其重定向/转发到“具体”/唯一(标识符?)URL?或者如何区分同一个OpenID URL上的不同最终用户?

在我当前的实现中,当我启用一些调试跟踪时,我得到的第一个请求是模式checkid_setup。在规范中,它说我在这里得到了声称的标识符。由于我在消费者网站上输入的内容(我的调试跟踪说的相同),这就是“常规”URL(OpenID端点URL)。即唯一网址。

  • 我现在必须做重定向吗?规格没有说明任何事情。我在哪里告诉“具体”网址? (就我而言,这是网址http://{endpoint-url}?u={endpoint-username}。)

还有术语“OpenID服务器”(URL)和“OpenID委托”(URL)。

  • 这些条款与上述其他条款有何关联?与OpenID端点URL完全相同?

  • 什么是“OpenID身份”?与OpenID标识符URL相同?


另请参阅相关问题:How does OpenID differ between different logins on the same OpenID endpoint?

(元问题:我是否应该在很多独立的SO问题中将其分开?我担心否则我可能无法得到所有问题的答案。)

3 个答案:

答案 0 :(得分:5)

好的,因为我刚刚修复了我的SMF OpenID endpoint implementation(阅读了我曾经here的一些非常相关的问题的细节),我对这些关系做了一些假设。当然,这并不能证明他们是正确的(所以请纠正我)。他们在这里:

  • 标识符网址= OpenID端点网址= IdP

  • OpenID端点唯一。对于该端点的所有最终用户来说都是一样的。

  • 已验证的标识符网址=身份

  • 经过验证的标识符网址是唯一的。它与端点用户帐户相关联。

  • https://www.google.com/accounts/o8/id是Google OpenID端点网址。

  • https://www.google.com/accounts/o8/id?id=AltOawk...是Google OpenID经过验证的标识符网址。

  • Google OpenID身份网址包含的哈希值也与OpenID域(此OpenID标识符保持有效的使用者域命名空间)相关。这是不仅仅是用户名的原因之一。

  • 关于如何提供唯一经过验证的标识符网址,请参阅here

我还有一些事情不清楚:

  • Google用于散列ID的其他原因是什么?它也可以使用id?u={username}&oidrealm={...}

  • 有这样的OpenID领域的原因是什么?

  • 标识符网址与声明的标识符网址之间究竟有什么区别?

答案 1 :(得分:2)

这是我的理解。我实际上只是回答你自己答案中的最后两个问题。希望有人发现这些有用。

  

拥有这样的OpenID领域的原因是什么?

领域用于安全。基本上,对照领域检查return_url,OpenID规范说它们必须匹配。 Google已经更进了一步,并为每个领域提供了唯一验证的标识符。他们可能已按照您的建议完成,并将域放回其标识符中,但您可以通过查看两个经过验证的标识符来判断它们是否是相同的最终用户。我认为他们正试图保持他们的标识符不含识别信息。 (具有讽刺意味,没有?)

  

标识符网址与声明的标识符网址之间究竟有什么区别?

声明的标识符是最终用户指定的标识符。这是他们的唯一标识符。雅虎就是一个很好的例子。它们允许您指定yahoo.com作为您的标识符,登录您的yahoo帐户,并向openid消费者返回唯一标识符。这只是简化了最终用户的流程。 (并增加他们使用yahoo.com作为他们的openid的可能性!)

答案 2 :(得分:2)

  

https://www.google.com/accounts/o8/id?id=AltOawk ......的目的是什么?这真的很独特,对我的Google帐户来说也一样吗?那个URL是什么标识我?

如果我理解了一切,答案就是“是的!”

  

为什么他们没有使用https://www.google.com/accounts/o8/id?u= {google-username}代替这个神秘的......?id = AltOawk ......?

我猜他们希望以后对您的帐户进行更改是安全的,如果您(例如现在或将来)能够更改您的用户名,那么您可能希望将其反映在您的OpenId声明中标识符 - 但是你会遇到麻烦!您的旧索赔标识符的所有注册都不会被评估。在此处阅读更多内容:http://wiki.openid.net/w/page/12995200/OpenID-Security-Best-Practices和此处:http://blog.nerdbank.net/2008/07/case-for-case-sensitive-openid-url.html