Get domain user php

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

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

16 ответов

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

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

Firefox также поддерживает (автоматическую) интегрированную аутентификацию. см. developer.mozilla.org/en/Integrated_Authentication

Если мое приложение выполняет разумные операции: могу ли я доверять переданному AUTH_USER? Клиенты являются частью хорошо управляемой корпоративной интрасети. Кроме AUTH_USER, мне нужно знать, принадлежит ли пользователь определенной группе. Эта информация тоже будет передана? И, наконец, есть ли у вас URL с описанием вашей информации?

Спасибо за этот ответ. Необходимо помнить, чтобы отключить анонимный доступ в IIS и включить встроенную проверку подлинности Windows. Используя Intraweb, можно получить аутентифицированного пользователя, используя WebApplication.Request.GetFieldByName (‘AUTH_USER’).

Читайте также:  Как изменить css в modx

У меня есть встроенная проверка подлинности Windows, и даже с IE пользователь спрашивает. Я не могу заставить его работать с IIS.

@Simurr это не просто возможно с IE, большинство других браузеров поддерживают его, но только в IE он включен по умолчанию для всего интернета, а остальные вы должны включить его вручную, прежде чем использовать его, для Firefox вы можете использовать это дополнение или вручную установите конфигурацию addons.mozilla.org/en-GB/firefox/addon/…

@MikeT, учитывая, что мой комментарий был от ’08, вероятно, это было возможно только в IE, хотя я только смутно помню, как изучал его. Приятно знать, что это работает сейчас.

Спасибо команда. Но мой случай другой. У меня есть много приложений, размещенных на одном сервере. Поэтому я хотел получить учетные данные AD с компьютера локального пользователя только для одного приложения. Если я включу Аутентификацию AD и отключу анонимный доступ, все другие приложения также будут заполнены для учетных данных AD. Поэтому, пожалуйста, предложите, что я могу сделать только для индивидуального применения.

У меня есть php mysql, работающий на IIS. Я могу использовать $_SERVER[«AUTH_USER»] , если я включу проверку подлинности Windows в IIS → Аутентификация и отключить анонимную аутентификацию (важно)

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

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

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

У меня php работает на IIS, и для этого сайта включена только аутентификация Windows. У меня нет этой информации. Что я мог перепроверить?

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

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

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

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

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

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

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

Источник

Можете ли вы получить имя пользователя 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 вернет значение, например: DOMAIN\username в нашей сети, а затем это просто случай удаления DOMAIN\ из строки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LoadModule authnz_sspi_module modules/mod_authnz_sspi.so 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  

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

$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; 

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

Источник

Оцените статью