打开Id XRDS Discovery

时间:2009-04-23 10:10:31

标签: php openid openid2

我正在使用Open Id,只是在我的网站(用PHP)上进行交互/认证Open Id的课程。我知道还有一些其他的库(比如RPX),但我想用自己的(很好的帮助我们更好地理解协议以及它是否适合我)。

我的问题与Open Id发现序列有关。基本上我已经达到了这样的程度,我正在寻找使用XRDS文档从声称的身份(openid.claimed_id)获取本地身份(openid.identity)。

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

看起来像DUMB请求我只发出一个cURL请求并获得Open Id Server,但必须使两个才能使用XRDS Smart方法。只是看起来不对,其他任何人都可以给我一些信息。

3 个答案:

答案 0 :(得分:2)

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

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

Accept: application/xrds+xml

然后页面可以立即响应XRDS文档,而不是您必须为XRDS链接解析的HTML文档。通过在Content-Type标头中检查application / xrds + xml的HTTP响应头,您将能够检测到这种情况。这是一个优化,因此RP通常不必进行第二次HTTP GET调用 - 但您不能依赖它发生。

答案 1 :(得分:0)

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

如果你想使用持久连接加速,你可以保持你的curl实例,但这可能是你想要的,也可能不是你想要的。

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

埃弗特

答案 2 :(得分:0)

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