2013-02-19 60 views
0

如何將kerberos auth轉發到其他服務器(使用CURL)和php。 我的請求中有$_SERVER['KRB5CCNAME'],我需要使用curl將其委託給另一臺服務器。PHP kerberos代表團

這怎麼辦?

代碼:

$ch = curl_init(); 

$url = 'http://www.somesite.com/info.php'; 

@curl_setopt($ch, CURLOPT_HTTPGET, 1); 

@curl_setopt($ch, CURLOPT_GSSAPI_DELEGATION, CURLGSSAPI_DELEGATION_FLAG); 
@curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE); 
@curl_setopt($ch, CURLOPT_USERPWD, ":"); 

@curl_setopt($ch, CURLOPT_URL, $url); 
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$resultContent = @curl_exec($ch); 

$httpCode = @curl_getinfo($ch, CURLINFO_HTTP_CODE); 

if(@curl_errno($ch)) 
{ 
    $msg = @curl_error($ch); 
    curl_close($ch); 
    die('Curl error: content: '.$this->resultContent.' code: '.$this->httpCode); 
} 

curl_close($ch); 

die('R: code: '.$httpCode.' content: '. htmlspecialchars($resultContent)); 

編輯:

我只是理解了它在PHP 5.3還沒有得到CURLOPT_GSSAPI_DELEGATION,它已經在5.5.0阿爾法3 增加工作的一個問題,即可查看如果這是問題。

+0

也許使用POST請求? – silkfire 2013-02-19 10:00:50

+0

請在發表評論前仔細閱讀一下kerberos。 Kerberos委派並不是要向其他服務器發送相同的收到請求。 – dfilkovi 2013-02-19 10:24:59

+0

您是否使用SPNEGO支持編譯'curl'? – 2013-02-20 14:02:21

回答

0

正如http://curl.haxx.se/libcurl/c/curl_easy_setopt.html CURLOPT_GSSAPI_DELEGATION

將該參數設置爲CURLGSSAPI_DELEGATION_FLAG允許無條件 GSSAPI憑據委託。自7.21.7開始,代表處默認爲 。將該參數設置爲CURLGSSAPI_DELEGATION_POLICY_FLAG 只有當OK-AS-DELEGATE標誌設置在服務 票的情況下,該功能是由GSSAPI實現 和GSS_C_DELEG_POLICY_FLAG的定義支持是提供 編譯時委託。

OK-AS-DELEGATE標誌應該在Kerberos服務票據(域策略)中設置。

+1

就不需要了。我們的curl版本是7.22,所以我認爲GSS_C_DELEG_POLICY_FLAG在編譯時可用。我會發布我們的代碼和更多的解釋,但它不起作用。 – dfilkovi 2013-02-20 13:00:04

+0

並非所有的curl編譯版本都是針對GSS API編譯的,因此您可能需要在phpinfo()內檢查。 – 2013-02-20 15:12:00

+1

已經檢查過,它已經編譯了GSS,但是它沒有CURLOPT_GSSAPI_DELEGATION,因爲它是在php 5.5.0中添加的,這仍然是alpha版本,所以我們會再等一會兒 – dfilkovi 2013-02-21 06:46:04