【问题标题】:Implementing OpenID实现 OpenID
【发布时间】:2010-05-03 02:26:46
【问题描述】:

按照这个教程:

http://www.plaxo.com/api/openid_recipe

其中一个步骤是:

需要查找OpenID是否 输入的已经属于一个现有的 您网站上的用户

我的问题:

gmail 帐户的 OpenID 是什么样的(我还没有其他 OP 帐户)?在我看来,OpenID = https://www.google.com/accounts/o8/id 用于 gmail,但我如何使用它来查找,因为它对所有用户都是一样的?

【问题讨论】:

标签: openid


【解决方案1】:

它实际上是https://www.google.com/accounts/o8/id?id=XXXXXXXX,用于对应用户的末尾的一些唯一字符串XXXXXXXX

从您链接的页面的下方:

当 OpenID 提供者重定向到 您的 return_to URL,他们将添加一个 一堆额外的查询字符串 包含的参数 验证所需的信息 用户的身份验证 开放标识。取决于 OpenID 您正在使用的库,您可能需要 将这些收集到一个数据结构中 传递给验证 功能,或者它可以为你做。

其中之一就是那个字符串。来自 Google OpenID 文档:

Google 提供的标识符,它 与用户的无关 实际的 Google 帐户名称或 密码,作为查询附加 参数 openid.claimed_id。

【讨论】:

  • 这是否成立:xxxxx = user@gmail.com ?
  • 没有。它包含一个不对应任何特定用户信息的哈希字符串,唯一的保证是同一个用户将拥有相同的哈希字符串。
  • 另外,您可能希望查看 google 自己的文档:code.google.com/apis/accounts/docs/OpenID.html - 相关引用,“附加了与用户的实际 Google 帐户名或密码无关的 Google 提供的标识符作为查询参数 openid.claimed_id。”
  • 我尝试了那个哈希字符串,但仍然必须去gmail登录。说,附加一个额外的xxxxx有什么好处?
  • 是因为SO没有实现这个功能吗?
【解决方案2】:

https://www.google.com/accounts/o8/id 用于登录。成功登录后,来自 Google 的响应将包含 openid.claimed_id 变量中的长唯一 url(带有哈希);那是您应该存储在数据库中并比较以了解它是新用户还是现有用户的用户。

在 myopenid 等其他 openid 提供程序中,两者(登录 url 和 claim_id)都是相同的。

【讨论】:

  • 但是我贴的tuto好像说OpenID可以在重定向到gmail之前得到?
  • 此处无法访问该页面;但是,正如我所说,对于 myopenid 等其他提供商,您可以在重定向之前获取唯一 ID:但是您如何确认用户没有说谎 - 您只能根据来自 openid 的响应来确认身份提供商,无论是 google 还是 myopenid。
【解决方案3】:

这里的关键区别在于 https://www.google.com/accounts/o8/id 不是 OpenID 标识符,而不是教程所指的方式。因为,正如您所指出的,它对所有用户都是一样的。在terminology of the specification 中,它是一个“OP Identifier”,它标识provider(Google),而不是用户。

这种做法(输入提供商的标识符而不是用户的标识符)在编写为您的站点启用 OpenID 的秘诀时并不常见。使用此流程时,在用户通过 id_res 响应从提供商重定向回您的站点之前,您没有用户的标识符。

顺便说一句,Google 现在确实提供了更清晰的标识符 URL。如果您设置了 Google 个人资料,那么您的个人资料页面 (@987654322@<b>myProfileName</b>) 也是一个 OpenID。与 /accounts/o8/id 标识符不同,这个标识符在您使用它的所有网站上都是稳定的,不涉及时髦的哈希字符串。

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 2011-07-24
    • 2011-06-05
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2010-10-02
    相关资源
    最近更新 更多