Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 开放Id XRDS发现_Php_Openid_Openid2 - Fatal编程技术网

Php 开放Id XRDS发现

Php 开放Id XRDS发现,php,openid,openid2,Php,Openid,Openid2,我正在使用openid,只是在我的站点(用PHP)上创建一个类来交互/验证openid。我知道还有其他一些库(比如RPX),但我想使用我自己的库(这有助于更好地理解协议,以及它是否适合我) 我的问题与开放Id发现序列有关。基本上,我已经到了使用XRDS文档从声明的标识(openid.claided_id)中获取本地标识(openid.identity)的地步 我的问题是,我是否必须发出一个cURL请求来获取XRDS位置(X-XRDS-Location),然后再发出一个cURL请求来获取实际的XR

我正在使用openid,只是在我的站点(用PHP)上创建一个类来交互/验证openid。我知道还有其他一些库(比如RPX),但我想使用我自己的库(这有助于更好地理解协议,以及它是否适合我)

我的问题与开放Id发现序列有关。基本上,我已经到了使用XRDS文档从声明的标识(openid.claided_id)中获取本地标识(openid.identity)的地步

我的问题是,我是否必须发出一个cURL请求来获取XRDS位置(X-XRDS-Location),然后再发出一个cURL请求来获取实际的XRDS文档


对于一个愚蠢的请求,我似乎只发出一个cURL请求并获得openid服务器,但必须发出两个请求才能使用XRDS智能方法。这似乎不对,其他人能给我一些信息吗。

我能给你的最好建议是,试着对HTTP请求进行一点抽象,然后只需完成两次HTTP请求的整个过程

如果您想使用持久性连接加快速度,可以保留curl实例,但这可能是您想要的,也可能不是您想要的

我希望这有帮助,祝你好运。。OpenID是自WebDAV=)以来我遇到的最庞大、最复杂的web标准之一


Evert

要完成,是的,您的RP必须HTTP获取用户提供给您的URL,然后搜索XRDS文档引用,如果找到,则从那里再进行一次HTTP获取。请记住,XRD可能托管在不同的服务器上,因此不要编写任何要求两个请求之间的连接相同的代码,因为它可能不是相同的连接

如果在初始HTTP GET请求中包含HTTP标头:

Accept: application/xrds+xml

然后,页面可能会立即响应XRDS文档,而不是需要解析XRDS链接的HTML文档。您可以通过检查内容类型标头中application/xrds+xml的HTTP响应标头来检测是否发生了这种情况。这是一种优化,因此RPs通常不必进行第二次HTTP GET调用,但您不能指望它会发生

我知道我在这里比赛迟到了,但我想你也应该去看看。它采用标准的“email as userid”模式,允许您从那里进行查找以发现openid等