2010-08-11 66 views
1

我們目前正在實施一個新的OpenSSO服務器。服務器位於與Web服務器不同的服務器上,並且無法在我們的PHP Web服務器上進行身份驗證。PHP OpenSSO身份驗證

使用openSSO令牌設置的cookie稱爲iPlanetDirectoryPro。這是從authServer.company.com設置的。我需要從webserver.company.com讀取此內容,然後發送HTTPRequest到authserver.company.com以檢索該OpenSSO令牌的屬性。

目前我的代碼看起來像這樣,但它不工作,我懷疑由於不正確的閱讀cookie。

$url = 'http://authServer.company.com:8080/opensso/identity/attributes'; 
$r = new HttpRequest(); 
$r->setURL($url); 
$r->setMethod(HTTP_METH_POST); 
$valarray = array(
    'Host' => 'authServer.company.com', 
    'Content-Type' => 'application/x-www-form-urlencoded', 
    'Cookie' => "iPlanetDirectoryPro=$_COOKIE[iPlanetDirectoryPro]" 
    ); 
$r->addHeaders($valarray); 
var_dump($r); 
var_dump($valarray); 
# 
# request 
# 
print "<br/>"; 
print "<b>what i'm saying to the server</b>"; 
print "<pre>"; 
#print "iPlanetDirectoryPro cookie: $_COOKIE[iPlanetDirectoryPro]"; 
print $r->getRawRequestMessage(); 
print "</pre>"; 

print "iPlanetDirectoryPro cookie: $_COOKIE[iPlanetDirectoryPro]"; 
$r->send(); 

# 
# response 
# 
print "<b>what the server is telling me</b>"; 
print "<pre>"; 
$response_body = $r->getResponseBody(); 
print $response_body; 
print "</pre>"; 

對此的任何想法?我是否以錯誤的方式解決了這個問題?

更新 - 所以我發現的底線是服務器根本無法讀取cookie,因爲它來自另一臺服務器。作爲一個工作aronud我實現了一個REST API,允許用戶從Web服務器提交登錄頁面。它發送給AuthServer,該響應返回。除非無效,否則迴應通常應該是一個標記。如果它是一個令牌,就會創建一個新的cookie,然後應用程序就可以使用該令牌與authserver進行通信,但cookie駐留在web服務器域

+0

你不和錯誤報告開發轉身一路上漲,是嗎?請這樣做 - 代碼中至少有兩個通知級別的錯誤,可能會造成問題。此外,您正在使用哪個HTTP請求類? – Charles 2010-08-11 17:12:43

+0

我正在使用PECL HTTPRequest類。我從服務器返回,但是它的401令牌爲NULL – CogitoErgoSum 2010-08-11 18:03:13

回答

0

顯然,401令牌爲空表示您沒有發送帶請求的令牌(或OpenSSO無法從請求中提取)。如果我假設您成功從客戶端請求中獲取cookie,那麼我建議您嘗試將cookie值作爲參數傳遞,而不是以標題開頭。

該參數將被忽略=標記值。

我建議,捲曲測試得到的請求權的形式 - 然後修改代碼以匹配成功的捲曲請求