2013-02-19 28 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