我一直在与Janrain OpenID PHP图书馆玩耍,主要是 我在Zendzone上找到的教程.

如何区分用户 - 尤其是Google用户,他们最终都使用了相同的OpenID URL, https://www.google.com/accounts/o8/id ?

基本上,我正在发现他们有一个开放式帐户……他们已经成功身份验证了……但是我的应用程序仍然不知道他们是谁。只是他们认证的。

为了区分用户,本教程使用“简单注册请求”来请求OpenID提供商的用户电子邮件 - 然后使用电子邮件地址查看这是否是返回的用户。

这对我不起作用,而且 显然不会与一些提供商合作 所以当我偶然发现功能时,我感到很兴奋 getDisplayIdentifier.

require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
// create file storage area for OpenID data
$store = new Auth_OpenID_FileStore('/wtv');
$consumer = new Auth_OpenID_Consumer($store);
$oid_response = $consumer->complete("http://example.com/oir_return");
if ($oid_response->status == Auth_OpenID_SUCCESS) {
    $hopefullyUniqueUserID = $oid_response->getDisplayIdentifier(); // I assumed this would be a relatively permanent way to identify the user...
                                           // I was wrong.
}

不幸的是,经过几个小时后,价值返回 getDisplayIdentifier 变化。

有帮助吗?

解决方案 2

问题是 Google的OpenID是独特的人均;我一直在思想交替 http://www.mysite.comhttp://mysite.com, ,这导致OpenID身份URL发生了变化!

其他提示

浏览代码,我认为是 $oid_response->identity_url 你要的那个。对我(虽然在dotnetopenauth而不是php-openid中)回来

https://www.google.com/accounts/o8/id?id=AItOawmqjknrgk6f9cNdPIVxW43GewJPa1ZW4GE

来自Google,ID部分是可重现的,希望我独有。但是,我还没有花几个小时来看看这是否发生了变化,所以很抱歉,这是否是您从GetDisplayIdentifier那里获得的 - 但是浏览源看起来像是使用第一部分,但是我没有PHP专家。

为什么不简单地使用OpenID URL来识别用户?认为它像电子邮件地址一样独特。

根据下面的最后一段,您绝对应该使用 identity_url 响应对象的属性(授予,这是指python库,但实现是 非常 相似的):

显示标识符与声称的标识符有关,但两者并不总是相同的。显示标识符是用户应识别的内容,而响应的标识符(在l {Identity_url}属性中)可能具有额外的信息以更好地持久。

URL将剥离其碎片以显示。 XRIS将显示人类可读的标识符(I-NAME),而不是持久标识符(I-Number)。

使用用户界面中的显示标识符。使用l {Identity_url}查询数据库或授权服务器。

来自 Python-Openid文档.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top