Php OpenID提供程序问题:如何指定与最终用户不同的标识';她声称的身份证

Php OpenID提供程序问题:如何指定与最终用户不同的标识';她声称的身份证,php,openid,janrain,openid-provider,Php,Openid,Janrain,Openid Provider,我使用的是JanRain库,实现的代码非常类似于他们的服务器示例(基本上是创建我自己的openid提供程序)。我已经让它工作了,但是当我尝试返回与指定给使用者的标识不同的标识时,我得到以下错误: 请求为,无法使用标识进行答复 在这种情况下,唯一的ID/URL是http://example.com/openid/33,而指定给消费者的是http://example.com 我用的是这样的东西: $request = $server->decodeRequest(); $request-&

我使用的是JanRain库,实现的代码非常类似于他们的服务器示例(基本上是创建我自己的openid提供程序)。我已经让它工作了,但是当我尝试返回与指定给使用者的标识不同的标识时,我得到以下错误:

请求为,无法使用标识进行答复

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

我用的是这样的东西:

$request  =  $server->decodeRequest();
$request->answer( true, null,  $id_url, $request->identity );
我试过切换
$request->identity
$id\u url
。我只在上面显示的状态中得到错误,而另一个状态可以工作,但似乎没有将正确的东西返回给消费者。我正在使用这里找到的OP Simple Registration test:,当我切换它们时,它可以工作,但我在日志中的任何地方都找不到我的
$id\u url

我的猜测是,我需要在流程的早期告诉消费者一些与最终用户指定的ID不同的信息,但到目前为止,我还没有找到正确的方法来尝试。我知道这是可能的,因为雅虎的OpenID就是这样工作的


欢迎提出任何意见或建议。谢谢

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

工作流程如下所示:

$request  =  $server->decodeRequest();
$request->answer( true, null,  $id_url, $request->identity );
  • 用户输入用户提供的标识符
  • 消费者对其执行发现,然后它将具有:
    • 提供程序终结点URL/版本。在这种情况下,声明的标识符/op本地标识符将是
      http://specs.openid.net/auth/2.0/identifier_select
    • 提供者端点URL、协议版本、声明的标识符(用户提供的标识符)和OP本地标识符

因此,如果您得到
http://specs.openid.net/auth/2.0/identifier_select

因此在我的例子中,端点位于
http://example.com/openid
,我已经用
指定了这一点。我是否也应该将
放在该页面上?我现在就试试。(如果我的用户已经登录了,我是否应该用实际的标识符替换它?@livin你不能这样做。OpenID2.0规范,第7.3.3节“基于HTML的发现仅可用于发现声明的标识符。”。您必须使用XRD。@Hmmm。。。我已经在写一个标题,它指向一个非常简单(静态)的XRDS文档,带有
标记,其中只包含
标记。如果我添加
http://specs.openid.net/auth/2.0/identifier_select
到该文档,这样行吗?是否存在使用XRD的点(发现后)并且应该有所不同?谢谢你的帮助,顺便说一句。@livingtech:不,它不起作用。您根本不应该指定LocalID,只需使用
http://specs.openid.net/auth/2.0/server
而不是
http://specs.openid.net/auth/2.0/signon
标签中的
。有关详细信息,请参见本规范第7.3.2.1节。@livingtech:RP遇到带有
http://specs.openid.net/auth/2.0/server
,它应该将
声明的\u id
标识设置发送到
http://specs.openid.net/auth/2.0/identifier_select
。如果设置为
http://example.com
,则发现过程中可能出现问题。也许您没有正确定义X-XRDS-Location,RP又回到了HTML发现?