1

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

请求是针对http://example.com/的,无法使用身份回复http://example.com/openid/33

在这种情况下,唯一的 ID/URL 是http://example.com/openid/33,而指定给消费者的是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 不同的信息,但到目前为止,我还没有找到合适的尝试。我知道这是可能的,因为这就是 yahoo 的 OpenID 的工作方式。

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

4

1 回答 1

2

您将端点 URL 与声明的标识符或 OP-local 标识符混淆了。

工作流程是这样的:

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

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

于 2010-08-31T15:35:54.370 回答