그런 식으로 달성하는 가장 쉬운 방법은 nginx 서버에서 NTLMv2 인증을 시뮬레이트하고 요청을 프록시로 리디렉션하고 응답을 확인하는 것입니다. 설치를 재현 할 수 없으므로 아래 코드는 테스트되지는 않았지만 작동해야합니다. 그렇지 않으면 약간의 도움이됩니다. 내가 당신을 도움이되기를 바랍니다 http://davenport.sourceforge.net/ntlm.html
:
<?php
$headers = getallheaders() //Equivalent to apache_request_headers() to get the headers of the request.
if(!isset($headers['Authorization'])) //Check Authorization Header
{
header('HTTP/1.1 401 Unauthorized'); //Return Unauthorized Http-Header (NTLM protocol)
header('WWW-Authenticate: NTLM'); //Authenticcation Information (NTLM protocol)
}
else
{
if(substr($headers['Authorization'],0,4) == 'NTLM') //Check whether Authorization Header is valid
{
$message = base64_decode(substr($headers['Authorization'], 5)) //Get NTLM Message from Authrization header
if(substr($message, 0, 8) == "NTLMSSP\x00") //Check whether NTLM Message is valid
{
if($message[8] == "\x01") //Check whether it's type-1-NTLM Message
{
//$message holds the base64 encoded type-1-NTLM message
$ch = curl_init(); //Use cURL to connect to web via proxy
curl_setopt($ch, CURLOPT_URL, "http://www.google.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: '.$headers['Authorization']));
curl_setopt($ch, CURLOPT_PROXY, <Your Proxy Adress>);
curl_setopt($ch, CURLOPT_PROXYPORT, <Your Proxy Port>);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
$header = substr($result, 0, $info['header_size']);
$body = substr($result, $info['header_size'], $info['download_content_length']-$info['header_size']);
$c_headers = explode("\r\n", $header);
for($i = 0; $i < (count($c_headers) - 2); $i++)
{
header($c_headers[$i]);
if(substr($c_headers[$i], 0, 16) == "WWW-Authenticate")
{
//Thats your type-2-message header Format: WWW-Authenticate: NTLM <base64-type-2-message>
}
}
}
else if ($message[8] == "\x03") //Check whether it's type-3-NTLM Message
{
$ch = curl_init(); //Use cURL to connect to web via proxy
curl_setopt($ch, CURLOPT_URL, "http://www.google.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: '.$headers['Authorization']));
curl_setopt($ch, CURLOPT_PROXY, <Your Proxy Adress>);
curl_setopt($ch, CURLOPT_PROXYPORT, <Your Proxy Port>);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if($info['CURLINFO_HTTP_CODE'] == 200)
{
//Authenticated
//$msg holds the base64 encoded type-3-NTLM message (which includes username, domain, workstation)
}
}
}
}
}?>
나는 NTLM 프로토콜의 기준을 사용했다. 의견을 말씀해주십시오.
출처
2013-08-19 17:39:58
Max
와우, "nginx NTLMv2"에 대한 Google 검색을 수행하는 것은 이미 첫 페이지에 표시되어 있으며, 나는이 질문에 불과 7 분 전에 질문했습니다. –