0

我有基于 NTLM (Active Directory) 的服务,我需要编写一个 PHP 应用程序。通常,用户使用 Activre Directory 凭据登录网站,这没问题。但我想做的是让他们在 PHP 编写的站点中输入他们的凭据,下一步将使用 cURL 对用户进行身份验证,以访问他们通常登录的基于 Active Directory 的站点。

这部分很难。然后,我需要保持通过 PHP cURL 脚本对基于 Active Directory 的站点进行身份验证的用户会话,以便以后再次使用它们(CRON 查询站点以确定它已更改并在发生这种情况时自动执行一些操作,通常用户已经这样做了手动)。为了在此更改发生时不存储他们的凭据以再次进行身份验证,我需要以某种方式将 NTLM 会话存储在 PHP cURL 站点中,以存储通过此 PHP cURL 站点对该站点进行身份验证的每个用户。我的问题是:这可能吗?

提前致谢。

@威廉穆德

您发布的代码实际上进行了 cookie 存储,但这不是我的意思,因为我已经这样做了(抱歉之前没有写过)。到目前为止我得到的是:

        $cookie_file_path = dirname(__FILE__) . '/cookies.txt';
        $ch = curl_init();

        //==========================================================================
         curl_setopt($ch, CURLOPT_USERPWD, $username. ':' . $password);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
         curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
         curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
         curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
         curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
         curl_setopt($ch, CURLINFO_HEADER_OUT, true);
         curl_setopt($ch, CURLOPT_FAILONERROR, 0);
         curl_setopt($ch, CURLOPT_MAXREDIRS, 100);
        //==========================================================================
        $ret = curl_exec($ch);

通过使用 optionsCURLOPT_COOKIEFILECURLOPT_COOKIEJAR,cURL 将 cookie 存储在本地文件“cookies.txt”中。问题是,当我评论CURLOPT_USERPWD选项时(在验证和存储 cookie 之后,理论上我有会话),我无法授权网站。也许它会重新初始化 NTLM 握手授权,并期待用户名和密码,我不想存储。

我只想存储会话信息,以提供服务此会话信息并省略第二次身份验证,但 cURL 似乎没有从 cookie 文件中获取此数据,并使用从服务发送给我的不相关数据重写它作为对未授权访问请求的响应.

4

1 回答 1

1

嗯,是的,你可以

$ch = curl_init('http://www.google.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Get headers too with this line
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
// Get cookie
preg_match('/^Set-Cookie:\s*([^;]*)/mi', $result, $m);

var_dump(parse_url($m[1]));

// And then of course store it somewhere :-)

如此处所见,如何将 php curl 中的 cookie 获取到变量中

于 2013-02-27T09:39:49.803 回答