Можете ли вы получить имя пользователя Windows (AD) в PHP?


У меня есть веб-приложение PHP в интрасети, которое может извлекать IP-адрес и имя хоста текущего пользователя на этой странице, но мне было интересно, есть ли способ получить/извлечь их имя пользователя Active Directory/Windows. Возможно ли это?

Author: fuentesjr, 2008-10-03

15 answers

Проверьте переменную запроса AUTH_USER. Это поле будет пустым, если ваше веб-приложение разрешает анонимный доступ, но если ваш сервер использует базовую или встроенную проверку подлинности Windows, оно будет содержать имя пользователя, прошедшего проверку подлинности.

В домене Active Directory, если ваши клиенты работают под управлением Internet Explorer и разрешения вашего веб-сервера/файловой системы настроены правильно, IE автоматически отправит свои учетные данные домена на ваш сервер и AUTH_USER будет MYDOMAIN\user.name без пользователей необходимость явного входа в ваше веб-приложение.

 39
Author: Dylan Beattie, 2014-10-11 04:38:17

У меня есть php mysql, работающий на IIS - я могу использовать $_SERVER["AUTH_USER"] если Я включу проверку подлинности Windows в IIS -> Проверка подлинности и отключу анонимную проверку подлинности (важно)

Я использовал это, чтобы получить своего пользователя и домен:

$user = $_SERVER['AUTH_USER'];

$user вернет значение типа: DOMAIN\username в нашей сети, а затем это просто случай удаления DOMAIN\ из строки.

До сих пор это работало в IE, FF, Chrome, Safari (протестировано).

 10
Author: Schwarz.Oz, 2014-10-11 04:30:34

Посмотрите на функции библиотеки LDAP PHP: http://us.php.net/ldap .

Active Directory [в основном] соответствует стандарту LDAP.

 4
Author: warren, 2008-10-03 19:57:39

Если вы используете Apache в Windows, вы можете установить mod_auth_sspi из

Http://www.gknw.at/development/apache/httpd-2.2/win32/modules/mod_auth_sspi-1.0.4-2.2.2.zip

Инструкции содержатся в файле УСТАНОВКИ, и в нем есть whoami.php пример. (Это просто случай копирования mod_auth_sspi.so файл в папку и добавление строки в httpd.conf.)

После его установки и выполнения необходимых настроек в httpd.conf для защиты каталогов если вы хотите, PHP заполнит $_SERVER['REMOTE_USER'] пользователем и доменом ("ПОЛЬЗОВАТЕЛЬ\ДОМЕН") аутентифицированного пользователя в IE - или запросит и аутентифицирует в Firefox перед его передачей.

Информация основана на сеансе, поэтому одиночный (иш) вход возможен даже в Firefox...

-Крейг

 3
Author: CrayFishUK, 2009-12-24 12:02:58

Вероятно, вы могли бы аутентифицировать пользователь в Apache с mod_auth_kerb, требуя аутентифицированного доступа к некоторым файлам … Я думаю, что таким образом имя пользователя также должно быть доступно где-то в переменных среды PHP... вероятно, лучше всего проверить с помощью <?php phpinfo(); ?>, как только вы запустите его.

 2
Author: hangy, 2008-10-03 20:13:08

Нет. Но что вы можете сделать, так это попросить администратора Active Directory включить LDAP, чтобы пользователи могли поддерживать один набор учетных данных

Http://us2.php.net/ldap

 1
Author: Peter Bailey, 2008-10-03 19:56:55

Проверьте исправленный модуль аутентификации NTLM для Apache https://github.com/rsim/mod_ntlm

На основе модуля аутентификации NTLM для Apache/Unix http://modntlm.sourceforge.net/

Подробнее читайте в http://blog.rayapps.com/

Источник: http://imthi.com/blog/programming/leopard-apache2-ntlm-php-integrated-windows-authentication.php

 1
Author: blomman9, 2011-10-26 06:49:35

Если вы хотите получить идентификатор удаленного пользователя/имя пользователя, используйте:

echo gethostbyaddr($_SERVER['REMOTE_ADDR']);

Вы получите что-то вроде iamuser1-mys.corp.company.com

Отфильтруйте оставшуюся часть домена, и вы сможете получить только идентификатор idsid.

Для получения дополнительной информации посетите http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/

 1
Author: Eddy Goh, 2012-12-21 08:29:50

Вы можете сказать getenv('USERNAME')

 1
Author: Someone, 2016-07-07 14:51:30

Get_user_name работает так же, как getenv('ИМЯ ПОЛЬЗОВАТЕЛЯ');

У меня были проблемы с кодировкой (с кириллицей) с использованием getenv('ИМЯ ПОЛЬЗОВАТЕЛЯ')

 0
Author: Kornilov Ruslan, 2012-04-24 07:58:04

Ссылка на попытку также выяснить, является ли AUTH_USER частью определенной доменной группы; разумный способ сделать это - создать заблокированную папку с текстовыми файлами (может быть пустой). Установите безопасность только для группы безопасности/дистрибутива, которую вы хотите проверить. Как только вы запустите @file_get_contents (

 0
Author: George, 2015-12-16 12:52:03

В нашей среде есть несколько доменов, поэтому я использую preg_replace с регулярным выражением, чтобы получить только имя пользователя без ДОМЕНА\.

preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
 0
Author: GMR, 2017-01-28 22:06:29

Это простой пример интеграции NTLM AD, позволяет выполнять единый вход в Internet Explorer, требует входа/настройки в других браузерах.

Пример PHP

<?php 
$user = $_SERVER['REMOTE_USER'];
$domain = getenv('USERDOMAIN');

?>

В вашем файле apache httpd.conf

LoadModule authnz_sspi_module modules/mod_authnz_sspi.so

<Directory "/path/to/folder">
    AllowOverride     All
    Options           ExecCGI
    AuthName          "SSPI Authentication"
    AuthType          SSPI
    SSPIAuth          On
    SSPIAuthoritative On
    SSPIOmitDomain    On
    Require           valid-user
    Require           user "NT AUTHORITY\ANONYMOUS LOGON" denied
</Directory>

И если вам нужен модуль, эта ссылка полезна:

Https://www.apachehaus.net/modules/mod_authnz_sspi/

 0
Author: PodTech.io, 2017-07-28 11:50:32

Попробуйте этот код:

$user= shell_exec("echo %username%"); 
    echo "user : $user";

Вы получаете свое имя пользователя windows(AD) в php

 -2
Author: UserHelpNeeding02356, 2017-03-07 16:21:20

Я перепробовал почти все эти предложения, но все они возвращали пустые значения. Если у кого-то еще есть эта проблема, я нашел эту удобную функцию на php.net (http://php.net/manual/en/function.get-current-user.php):

get_current_user();
$username = get_current_user();
echo $username;

Это был единственный способ, которым я, наконец, смог получить имя пользователя active directory. Если ни один из вышеперечисленных ответов не сработал, попробуйте это сделать.

 -2
Author: Purple Lady, 2017-06-19 20:31:51