[英]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(授權)控制。 看到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.