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

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

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

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

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

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

 $user = $_SERVER['AUTH_USER']; 

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

Это работало в IE, FF, Chrome, Safari (проверено).

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

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

Если вы используете 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

Инструкции находятся в файле INSTALL, и есть пример whoami.php. (Это просто копирование файла mod_auth_sspi.so в папку и добавление строки в httpd.conf.)

После его установки и необходимых настроек в httpd.conf для защиты каталогов, которые вы хотите, PHP заполнит $_SERVER['REMOTE_USER'] пользователем и доменом (USER \ DOMAIN) аутентифицированного пользователя в IE – – либо запросить и подтвердить подлинность в Firefox, прежде чем передавать его.

Информация основана на сеансе, поэтому сингл (ish) signon возможен даже в Firefox …

-Craig

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

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

http://us2.php.net/ldap

Проверьте исправленный модуль аутентификации 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

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

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

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

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

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

Есть несколько дополнительных библиотек PEAR, которые могут облегчить задачу:

http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

get_user_name работает так же, как getenv ('USERNAME');

У меня были проблемы с кодированием (с кириллицей) с использованием getenv ('USERNAME')

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

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

У нас есть несколько доменов в нашей среде, поэтому я использую preg_replace с регулярным выражением, чтобы получить только имя пользователя без DOMAIN \.

 preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]); 

Это простой пример интеграции 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/

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

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

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

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

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

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