繁体   English   中英

PHP NTLM身份验证到Active Directory +保持会话

[英]PHP NTLM Authentication to Active Directory + keeping session

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

这部分很难。 然后,我需要保持通过PHP cURL脚本对基于Active Directory的站点进行身份验证的用户会话,以便以后再次使用它们(CRON查询站点确定它已更改,并在发生这种情况时自动执行一些操作,通常用户已执行此操作)手动)。 为了避免在发生此更改时不存储其凭据以再次进行身份验证,我不知何故需要在PHP cURL站点中将NTLM会话存储到通过此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握手授权,并希望输入我不想存储的用户名和密码。

我想只保存会话信息,提供服务这个会话信息,而忽略第二身份验证,但卷曲似乎没有采取从cookie文件这个数据,并与不相关的数据重写发送给我从服务的响应不AUTHRORISED访问请求。

好吧,是的,你可以

$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 :-)

如此处所示, 如何将Cookie从php curl变成变量

暂无
暂无

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

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