php:转发ntlm凭据卷曲

时间:2012-02-02 11:40:43

标签: php curl ntlm

我有一个动态的php页面,我需要使用get参数调用。然后,我想将生成的html放入一个字符串中,稍后再使用它(我正在尝试使用tonic框架进行Web服务)

所以这与PHP - Read dynamically generated (and echoed) HTML into a string?类似,我尝试了使用cURL的答案。

问题是使用ntlm(apache mod_auth_sspi)进行身份验证。执行curl的php脚本已经过身份验证,例如,只有有效的用户才能执行它。以某种方式可以将这些“凭据”传递给cURL? (用户名可用,但当然不是密码)

或者一种完全不同的方法也可以,但我只想创建一个用html内容创建字符串的函数。

$response = new Response($request);
$format = $request->mostAcceptable(array(
    'json', 'html', 'txt'
        ));

switch ($format) {

    case 'html':
        $response->addHeader('Content-type', 'text/html');
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'http://localhost/viewRecord.php?identifier=' . $identifier);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); 
        $html = curl_exec($ch);
        curl_close($ch);
        $response->body = $html;
        break;
    //...   
}

3 个答案:

答案 0 :(得分:6)

我可以通过添加以下curl选项来实现此功能:

curl_setopt($curly[$id], CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($curly[$id], CURLOPT_UNRESTRICTED_AUTH, true);
curl_setopt($curly[$id], CURLOPT_USERPWD, ":");

根据php的版本https://bugs.php.net/bug.php?id=62195

,有一个错误

答案 1 :(得分:0)

答案很简单:

这是不可能的。

解决方法是将所有文件(包括php,JavaScript和CSS)放在不需要NTLM身份验证的目录中。

要实现这一点,要么需要访问Apache配置,如果不可能,那么只有Apache配置允许覆盖.htaccess中的SSPI。允许任何身份验证(=也无),但限制访问127.0.0.0,因为allrequest来自同一服务器上的cURL。

对于授权,您可以将php会话中的数据传递给会话cookie到cURL,然后会话数据可以用于从cURL调用的页面中的授权。

编辑:

我基本上减少了NTLM的使用量。我现在有1个登录页面(身份验证),其他一切都由php session(授权)控制。参见

Apache2, PHP: create automatic ntlm login page

答案 2 :(得分:0)

这对我有用:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM|CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
curl_setopt($ch, CURLOPT_USERPWD, "YOUR_USER:YOUR_PWD");