2009-04-23 34 views
3

我正在使用Open Id,只是在我的網站(使用PHP)創建一個類來交互/授權Open Id。我知道還有其他一些庫(如RPX),但我想用我自己的(它的好處是幫助我們更好地理解協議以及它是否適合我)。Open Id XRDS發現

我與Open Id發現序列有關的問題。基本上,我已經達到了使用XRDS文檔從聲明的標識(openid.claimed_id)獲取本地標識(openid.identity)的地步。

我的問題是,我必須提出一個cURL請求來獲取XRDS位置(X-XRDS-location),然後再發出一個cURL請求來獲得實際的XRDS文檔嗎?

它似乎與一個DUMB請求我只做一個cURL請求並獲得Open Id服務器,但必須使兩個使用XRDS智能方法。只是看起來不正確,任何人都可以給我一些信息。

回答

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調用 - 但不能依賴它發生。

0

我可以給你的最好的建議是嘗試抽象你的HTTP請求一點點,然後只需要完成兩次HTTP請求的整個過程。

如果你想使用持續連接來加快速度,你可以保持你的curl實例,但這可能會或可能不是你想要的。

我希望這可以幫助,祝你好運.. OpenID是最龐大和錯綜複雜的Web標準的WebDAV以來我遇到一個=)

埃弗特

0

我知道我在這裏比賽遲到了,但我想你還應該查看the webfinger protocol。它採用標準的「電子郵件作爲用戶標識」模式,並讓你從那裏進行查找以發現openid等。