簡體   English   中英

php:轉發ntlm憑據卷曲

[英]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(授權)控制。 看到

Apache2,PHP:創建自動ntlm登錄頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM