Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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, чтобы пользователи могли поддерживать один набор учетных данных

http://us2.php.net/ldap

Ответ 9

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

Ответ 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>

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

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

Ответ 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;

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