2013-02-27 44 views
0

我有基於NTLM(Active Directory)的服務,我需要編寫一個PHP應用程序。通常情況下,用戶使用Activre Directory憑據登錄網站,沒關係。 但我想要做的是讓他們輸入他們的憑據到PHP編寫的站點,該站點在下一步中將使用cURL來驗證用戶是否正常登錄到基於Active Directory的站點。PHP NTLM身份驗證到Active Directory +保持會話

而這一部分很難。然後,我需要保持通過PHP cURL腳本驗證到基於Active Directory的站點的用戶會話,以便稍後再次使用它們(CRON查詢站點以確定它已更改,並在發生這種情況時自動執行一些操作,通常用戶具有手動)。 爲了不存儲他們的憑證以便在發生這種變化時再次進行身份驗證,我需要將每個用戶通過PHP cURL站點存儲到PHP cURL站點的NTLM會話中,以便通過此PHP站點網站向 該站點進行身份驗證。 我的問題是:這甚至可能嗎?

在此先感謝。

@Willem穆德

你已經發布的代碼實際上做的cookie存儲,但是這不是我的觀點becouse我已經這樣做了(對不起,之前不寫它)。我走到這一步是:

 $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,捲曲確實該cookie存儲在本地文件「cookie.txt的」。問題是,當我評論CURLOPT_USERPWD選項(在認證和存儲cookie之後,理論上我有會話)時,我無法向網站授權。也許它會重新初始化NTLM握手授權,並期待用戶名和密碼,我不想存儲它們。

我想只存儲會話信息,提供本次會話信息服務並省略第二次身份驗證,但是cURL似乎並未將這些數據從cookie文件中取出,並且它與不相關的數據從服務中發送給我回應未授權訪問請求。

+0

看到請不要修改的問題那麼多(從「如何存儲的cookie」到「如何發送的cookie」),因爲它使所有給定的答案無關緊要。相反,請接受最佳答案併發布另一個問題。這讓每個人都高興,併爲混亂保存:-) – 2013-02-27 10:23:18

回答

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