繁体   English   中英

php:转发ntlm凭据卷曲

[英]php: forward ntlm credentials to curl

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

所以这类似于PHP - 将动态生成(和回显)的HTML读入字符串? 我尝试了使用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;
    //...   
}

我可以通过添加以下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

这对我有用:

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");

答案很简单:

这是不可能的。

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

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

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

编辑:

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

Apache2,PHP:创建自动ntlm登录页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM