2010-04-28 89 views
1

根据这一政党成员:实施的OpenID

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

步骤之一是:

需要查找的OpenID的 是否进入已经属于现有 用户在您的网站

我的问题:

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

+0

真正的id(Dav提到的)将在openid响应的'openid.claimed_id'变量中可用。阅读http://code.google.com/apis/accounts/docs/OpenID.html#Samples了解更多信息。 – Amarghosh 2010-04-28 05:57:00

+0

因此,该ID不是用于直接登录,而是用于检索信息? – openid 2010-04-28 06:26:05

回答

1

https://www.google.com/accounts/o8/id是您用于登录的内容。成功登录后,Google的响应将包含openid.claimed_id变量中的长唯一网址(带散列);这是你应该存储在数据库中的一个,并比较它是否是新用户或现有用户。

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

+0

但我贴的tuto似乎说,OpenID可以在重定向到Gmail之前得到? – openid 2010-04-28 06:54:49

+0

此页面无法访问;但是,正如我所说的,对于像myopenid等其他提供商的情况,您可以在重定向之前获得唯一的ID:但是,如何确认用户没有说谎 - 您只能根据openid的响应来确认身份提供者,无论是谷歌还是myopenid。 – Amarghosh 2010-04-28 07:04:50

+0

这正是我的想法! – openid 2010-04-28 07:10:19

3

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

从你的链接页面进一步下跌:

当OpenID提供商重定向到 您的return_to URL,就会增加额外的查询字符串的 一堆包含验证所需的 信息 参数 用户使用此012xxOpenID进行身份验证。根据您使用的OpenID 库,您可能需要将这些数据收集到一个数据结构 以传递到验证 函数,或者它可能为您执行。

其中之一就是那个字符串。从谷歌的OpenID文档:

甲谷歌提供的标识符,该标识符 具有到用户的实际 谷歌的帐户名或密码 没有关系,被附加作为查询 参数openid.claimed_id。

+0

这是否成立:'xxxxx' ='user @ gmail.com'? – openid 2010-04-28 05:53:25

+0

不。它包含一个与任何特定用户信息不对应的哈希字符串,唯一的保证是同一个用户将具有相同的哈希字符串。 – Amber 2010-04-28 05:54:10

+0

此外,您可能希望查看Google自己的文档:http://code.google.com/apis/accounts/docs/OpenID.html - 相关报价,“Google提供的标识符,与用户的实际的Google帐户名称或密码作为查询参数openid.claimed_id追加。“ – Amber 2010-04-28 05:55:06

1

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

这种做法(进入供应商的标识,而不是用户)并不常见当时一种OpenID的启用写你的网站的食谱。使用此流程时,用户没有标识符,直到用户通过id_res响应从提供商重定向回您的站点。

另外,Google现在可以提供更清晰的标识符URL。如果您设置了Google个人资料,则您的个人资料页面(http://www.google.com/profiles/myProfileName)也是一个OpenID。与/accounts/o8/id标识符不同,此标识符在您使用它的所有站点中都是稳定的,没有涉及任何时髦的散列字符串。