【问题标题】:PHP NTLM Authentication to Active Directory + keeping sessionPHP NTLM 身份验证到 Active Directory + 保持会话
【发布时间】:2013-02-27 09:05:49
【问题描述】:

我有基于 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);

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

我只想存储会话信息,以提供服务此会话信息并省略第二次身份验证,但 cURL 似乎没有从 cookie 文件中获取此数据,并且 REWRITES 将其与不相关的数据发送到我作为对未授权访问请求的响应而退出服务。

【问题讨论】:

  • 请不要过多地改变问题(从“如何存储 cookie”到“如何发送 cookie”),因为它使所有给出的答案都无关紧要。相反,请接受最佳答案并发布另一个问题。这让每个人都开心并避免混乱:-)

标签: php curl active-directory ntlm


【解决方案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 :-)

在这里看到how to get the cookies from a php curl into a variable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多