3

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

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

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

似乎对于一个 DUMB 请求,我只发出一个 cURL 请求并获得 Open Id 服务器,但必须发出两个才能使用 XRDS Smart 方法。好像不太对,谁能给我一些信息。

4

3 回答 3

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 调用——但您不能依赖它发生。

于 2009-04-24T15:24:49.497 回答
0

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

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

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

翻转

于 2009-04-23T14:18:00.410 回答
0

我知道我在这里玩游戏迟到了,但我认为您还应该检查一下webfinger 协议。它采用标准的“电子邮件作为用户 ID”模式,让您从那里进行查找以发现 openid 等。

于 2010-06-03T00:41:15.747 回答