У меня есть веб-приложение PHP в интрасети, которое может извлекать IP-адрес и имя хоста текущего пользователя на этой странице, но мне было интересно, есть ли способ получить/извлечь их имя пользователя Active Directory/Windows. Возможно ли это?
Можете ли вы получить имя пользователя Windows (AD) в PHP?
Ответ 1
Проверьте переменную запроса AUTH_USER
. Это будет пустым, если ваше веб-приложение разрешает анонимный доступ, но если ваш сервер использует базовую или интегрированную проверку подлинности Windows, он будет содержать имя пользователя аутентифицированного пользователя.
В домене Active Directory, если ваши клиенты работают с Internet Explorer, и ваши разрешения на веб-сервер/файловую систему настроены правильно, IE будет тихо отправлять свои учетные данные домена на ваш сервер, а AUTH_USER
будет MYDOMAIN\user.name
без того, чтобы пользователи, для явного входа в ваше веб-приложение.
Ответ 2
У меня есть php mysql, работающий на IIS. Я могу использовать $_SERVER["AUTH_USER"]
, если я включу проверку подлинности Windows в IIS → Аутентификация и отключить анонимную аутентификацию (важно)
Я использовал это, чтобы получить мой пользователь и домен:
$user = $_SERVER['AUTH_USER'];
$user
вернет значение, подобное: DOMAIN\username
в нашей сети, а затем это просто случай удаления DOMAIN\
из строки.
Это работает в IE, FF, Chrome, Safari (проверено).
Ответ 3
Посмотрите на функции библиотеки PHP LDAP: http://us.php.net/ldap.
Active Directory [в основном] соответствует стандарту LDAP.
Ответ 4
Если вы используете Apache в Windows, вы можете установить mod_auth_sspi из
https://sourceforge.net/projects/mod-auth-sspi/
Инструкции находятся в файле INSTALL, и есть пример whoami.php. (Это просто случай копирования файла mod_auth_sspi.so в папку и добавления строки в httpd.conf.)
После установки и установки необходимых настроек в httpd.conf для защиты нужных вам каталогов PHP заполнит $_SERVER['REMOTE_USER']
пользователем и доменом ('USER\DOMAIN') аутентифицированного пользователя в IE - - или запросить и подтвердить подлинность в Firefox перед передачей.
Информация основана на сеансах, поэтому единый вход (ish) возможен даже в Firefox...
-Craig
Ответ 5
Возможно, вы аутентифицируете пользователя в Apache с mod_auth_kerb, требуя аутентифицированного доступа к некоторым файлам... Я так думаю, что имя пользователя также должно быть доступно в переменных среды PHP где-то... вероятно, лучше для проверки с помощью <?php phpinfo(); ?>
после его запуска.
Ответ 6
Если вы хотите получить идентификатор/имя пользователя удаленного пользователя, используйте:
echo gethostbyaddr($_SERVER['REMOTE_ADDR']);
Вы получите что-то вроде iamuser1-mys.corp.company.com
Отфильтруйте остальную часть домена позади, и вы можете получить только идентификатор.
Для получения дополнительной информации посетите http://lostwithin.net/how-to-get-users-ip-and-computer-name-using-php/
Ответ 7
У нас есть несколько доменов в нашей среде, поэтому я использую preg_replace с регулярным выражением, чтобы получить только имя пользователя без DOMAIN \.
preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
Ответ 8
Нет. Но вы можете сделать, чтобы администратор Active Directory включил LDAP, чтобы пользователи могли поддерживать один набор учетных данных
Ответ 9
Вы можете сказать getenv('USERNAME')
Ответ 10
Проверьте исправленный модуль аутентификации NTLM для Apache https://github.com/rsim/mod_ntlm
На основе NTLM-модуля auth для Apache/Unix http://modntlm.sourceforge.net/
Подробнее на http://blog.rayapps.com/
Источник: http://imthi.com/blog/programming/leopard-apache2-ntlm-php-integrated-windows-authentication.php
Ответ 11
Есть несколько дополнительных библиотек PEAR, которые могут облегчить задачу:
Ответ 12
get_user_name работает так же, как getenv ('USERNAME');
У меня были проблемы с кодировкой (с кириллицей) с использованием getenv ('USERNAME')
Ответ 13
Ссылка на попытку также выяснить, является ли AUTH_USER частью определенной группы домена; умный способ сделать это: t создать заблокированную папку с текстовыми файлами (может быть пустым). Установите безопасность только для группы безопасности/группы, которую вы хотите проверить. После запуска @file_get_contents (< --- будет выдавать предупреждение)... если у пользователя нет группового доступа, они не смогут получить содержимое файла и, следовательно, не будут иметь доступ к этой конкретной группе AD. Это просто и прекрасно работает.
Ответ 14
Это простой пример интеграции 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>
И если вам нужен модуль, эта ссылка полезна:
Ответ 15
Используйте этот код:
shell_exec("wmic computersystem get username")
Ответ 16
попробуйте этот код:
$user= shell_exec("echo %username%");
echo "user : $user";
вы получаете имя пользователя Windows (AD) в php
Ответ 17
Я попробовал почти все эти предложения, но все они возвращали пустые значения. Если у кого-то еще есть эта проблема, я нашел эту удобную функцию на php.net(http://php.net/manual/en/function.get-current-user.php):
get_current_user();
$username = get_current_user();
echo $username;
Это был единственный способ, когда я наконец смог получить имя пользователя активного каталога. Если ни один из вышеприведенных ответов не сработал, попробуйте.