2011-05-10 145 views
3

之間代理的OAuth的要求,我們有一個問題1.0A請求與消費者(客戶端)之間的中間代理服務器和提供商(服務器的OAuth)如何代理的OAuth。消費者和提供者

基本上它看起來是這樣的:

------------ 
| Consumer | 
------------ 
     | 
     V 
------------ 
| Proxy | 
------------ 
     | 
     V 
---------------- 
| oAuth Server | 
---------------- 

可能的問題,我們想到的是,重新發送HTTP請求到我們的OAuth服務器時,代理服務器的Apache將設置一些請求標題爲不同的值,並且當請求在oAuth服務器上簽名時,簽名將不匹配。

您是否知道代理服務器是否可以在不做任何修改的情況下重新發送請求,因此簽名將在oAuth情況下有效?

我們正在考慮的另一個選擇是在簽名前在oAuth服務器上替換已修改的標頭,從而將請求修改爲不是來自代理,而是直接來自客戶端。你認爲這在PHP中是可行的 - 替換請求的頭部,例如$ _SERVER變量?

謝謝

回答

1

原來,請求籤名時使用客戶端唯一的HTTP標頭是HTTP主機頭。如果oAuth參數作爲OAuth標頭傳遞,則不包含特殊的OAuth標頭。

所以代理服務器應該做的唯一事情就是向我們發送客戶端用來簽署請求的HOST頭。

例子: 讓我們假設,如果客戶(消費者)正在HTTP請求到代理服務器,以獲得令牌,它發送請求到以下端點:

http://proxy.com/oauth/request

在這種情況下,請求將是這樣的,並且在對請求進行簽名時將使用值爲proxy.com的主機頭。

POST /oauth/request HTTP/1.1 
Host: proxy.com 

假設,即在此我們的OAuth服務器期望請求的端點是:

http://oursite.com/oauth/request

當代理服務器收到請求時,它可以將其重新發送到我們的端點和在額外的HTTP標頭中給我們提供值proxy.com,我們可以用它來在我們身邊簽署請求,而不是使用原來的HOST標頭,這將與value.comite.com