| |
|
|
| | Здравствуйте all.
Мне необходимо получить имя (login) пользователя, который он ввел во время NTML аутоидентификации windows. Каким образом это можно сделать?
З.Ы. Поскольку я еще совсем зеленый, просьба меня сильно не пинать :) | |
| |
|
|
| |
|
|
| |
для: rene
(11.12.2006 в 17:21)
| | | Аммм... так что ли?
<?php
if (!empty ($_POST['User'])) {
echo htmlspecialchars ($_POST['User']);
}
?>
<html>
<form method = "POST">
<input type = "text" name = "User">
<input type = "submit">
</form>
|
| |
| |
|
|
| |
|
|
| |
для: Fli
(11.12.2006 в 17:26)
| | | Хм... нет!
Мне бы хотелось получить имя пользователя, под которым он вошел в систему (windows).
Это используется при windows авторизации на прокси сервере. | |
| |
|
|
| |
|
|
| |
для: rene
(11.12.2006 в 18:20)
| | | Очень долго бились над этим всей большой командой. На PHP (при работе с сервером) не получается, хоть тресни. Нам это нужно было для интранета - проще, чем делать систему авторизации. Никак. Причем в той части интранета, которая сделана шведами на ASP - каким-то образом юзернэйм вылавливается и все в порядке.
Кстати, дома на локальной машине (стоит денвер) работают переменные $_ENV['USERNAME'] и $_ENV['USERPROFILE']. Только что проверил. На сервере - нет. Может, сервер надо как-то настраивать? | |
| |
|
|
| |
|
|
| |
для: aexb
(11.12.2006 в 19:28)
| | | Вот код, выводящий имя пользователя, домен и имя машины. Отыскал в дебрях инета.
Переменные тут интересные, например переменной $login было присвоено значение "rene", но функция strlen ($login) утверждает что в ней 8 символов :) т.е. между буквами вставлены символы с кодом 0. Я чуть голову не сломал пытаясь работать с этой переменной, слабоват я еще для PHP :)
<?php
$headers = apache_request_headers(); // получаем все заголовки клиента
if (!isset($headers['Authorization'])) { // если заголовка авторизации нет
header('HTTP/1.0 401 Unauthorized'); // требуем от клиента авторизации
header('WWW-Authenticate: NTLM'); // тип требуемой авторизации - NTLM
exit; // завершаем выполнение скрипта
}
if(isset($headers['Authorization'])) //dans le cas d'une authorisation (identification)
{
if(substr($headers['Authorization'],0,5) == 'NTLM '){ // on verifit que le client soit en NTLM
$chaine=$headers['Authorization'];
$chaine=substr($chaine, 5); // recuperation du base64-encoded type1 message
$chained64=base64_decode($chaine); // decodage base64 dans $chained64
if(ord($chained64{8}) == 1){
// |_ byte signifiant l'etape du processus d'identification (etape 3)
// verification du drapeau NTLM "0xb2" a l'offset 13 dans le message type-1-message :
if (ord($chained64[13]) != 178){
echo "Ваш браузер не потдерживает NTLM авторизацию бла бла бла";
exit;
}
$retAuth = "NTLMSSP";
$retAuth .= chr(0);
$retAuth .= chr(2);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(40);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(1);
$retAuth .= chr(130);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(2);
$retAuth .= chr(2);
$retAuth .= chr(2);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth .= chr(0);
$retAuth64 =base64_encode($retAuth); // encode en base64
$retAuth64 = trim($retAuth64); // enleve les espaces de debut et de fin
header( "HTTP/1.0 401 Unauthorized" ); // envoi le nouveau header
header( "WWW-Authenticate: NTLM $retAuth64" ); // avec l'identification supplementaire
exit;
}
else if(ord($chained64{8}) == 3){
// |_ byte signifiant l'etape du processus d'identification (etape 5)
// on recupere le domaine
$lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); // longueur du domain
$offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); // position du domain.
$domain = substr($chained64, $offset_domain, $lenght_domain); // decoupage du du domain
//le login
$lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); // longueur du login.
$offset_login = (ord($chained64[41])*256 + ord($chained64[40])); // position du login.
$login = substr($chained64, $offset_login, $lenght_login); // decoupage du login
// l'host
$lenght_host = (ord($chained64[47])*256 + ord($chained64[46])); // longueur de l'host.
$offset_host = (ord($chained64[49])*256 + ord($chained64[48])); // position de l'host.
$host = substr($chained64, $offset_host, $lenght_host); // decoupage du l'host
echo "Domain is : $domain";
echo "<br>Login is : $login";
echo "<br>host is : $host";
}
}
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: aexb
(11.12.2006 в 19:28)
| | | >Кстати, дома на локальной машине (стоит денвер) работают переменные $_ENV['USERNAME'] и $_ENV['USERPROFILE']. Только что проверил. На сервере - нет. Может, сервер надо как-то настраивать?
По поводу переменной окружения $_ENV. ИХМО в нее передаются различные значения из окружения в которой работает PHP, в частности из операционной системы. Я так понимаю, для разных платформ и операционок и значения будут разные, к примеру для *nix систем переменная $_ENV['USERPROFILE'] может осутствовать.
для примера:
<?php
foreach ($_ENVas $ var => $value)
{
echo "$var: $value <br>";
}
?>
|
| |
| |
|
|