我正在使用 Open Id,只是在制作一个类来交互/验证我网站上的 Open Id(在 PHP 中)。我知道还有其他一些库(如 RPX),但我想使用我自己的库(有助于更好地理解协议(protocol)以及它是否适合我)。
我的问题与 Open Id 发现序列有关。基本上我已经到了我正在考虑使用 XRDS 文档从声称的身份 (openid.claimed_id) 获取本地身份 (openid.identity) 的地步。
我的问题是,我是否必须发出 cURL 请求才能获取 XRDS 位置 (X-XRDS-location),然后发出另一个 cURL 请求才能获取实际的 XRDS 文档?
似乎对于 DUMB 请求,我只发出一个 cURL 请求并获取 Open Id 服务器,但必须创建两个才能使用 XRDS Smart 方法。好像不太对啊,谁能给我一些信息。
最佳答案
要完整,是的,您的 RP 必须对用户提供给您的 URL 进行 HTTP GET,然后搜索 XRDS 文档引用,如果找到,则从那里执行另一个 HTTP GET。请记住,XRDS 可能托管在不同的服务器上,因此不要编写任何要求两个请求之间的连接相同的内容,因为它可能不是同一个连接。
如果在初始 HTTP GET 请求中包含 HTTP header :
Accept: application/xrds+xml
然后页面可能会立即响应 XRDS 文档,而不是您必须为 XRDS 链接解析的 HTML 文档。您将能够通过检查其 Content-Type header 中 application/xrds+xml 的 HTTP 响应 header 来检测是否发生了这种情况。这是一种优化,因此 RP 通常不必进行第二次 HTTP GET 调用——但您不能依赖它的发生。
关于php - 打开 ID XRDS 发现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/781102/