OpenID提供商问题:如何指定与最终用户的claim-id不同的身份

时间:2010-08-31 15:25:21

标签: php openid janrain openid-provider

我正在使用JanRain库,并实现与其服务器示例非常相似的代码(实质上是创建我自己的openid提供程序)。我有它工作,但当我尝试返回与指定给消费者的身份不同的身份时,我收到以下错误:

  

请求是http://example.com/,无法回复身份http://example.com/openid/33

在这种情况下,唯一ID / URL为http://example.com/openid/33,而为消费者指定的ID为http://example.com

我正在使用这样的东西:

$request  =  $server->decodeRequest();
$request->answer( true, null,  $id_url, $request->identity );

我尝试切换$request->identity$id_url。我只在上面显示的状态下得到错误,而另一个状态有效,但似乎没有向消费者返回正确的东西。我正在使用此处的OP简单注册测试:http://test-id.org/OP/Sreg.aspx,当我切换它时,它可以正常工作,但我无法在日志中的任何位置找到$id_url

我的猜测是,我需要在过程中告诉消费者一些关于ID与最终用户指定的ID不同的内容,但到目前为止我还没有找到正确的尝试。我知道这是可能的,因为雅虎的OpenID就是这样的。

欢迎任何想法或建议。谢谢!

1 个答案:

答案 0 :(得分:2)

您将端点URL与声明的标识符或OP本地标识符混淆。

工作流程如下:

  • 用户输入用户提供的标识符
  • 消费者对其执行发现,然后它将具有:
    • 提供商端点URL /版本。在这种情况下,声明的标识符/操作本地标识符将为http://specs.openid.net/auth/2.0/identifier_select
    • 提供者端点URL,协议版本,声明的标识符(用户提供的标识符)和OP本地标识符

所以如果你有http://specs.openid.net/auth/2.0/identifier_select,你应该只提供一个新的标识符。