Можете ли вы получить имя пользователя Windows (AD) в PHP? - PullRequest
43 голосов
/ 03 октября 2008

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

Ответы [ 15 ]

44 голосов
/ 03 октября 2008

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

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

16 голосов
/ 29 июля 2010

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

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

$user = $_SERVER['AUTH_USER'];

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

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

4 голосов
/ 03 октября 2008

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

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

3 голосов
/ 24 декабря 2009

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

2 голосов
/ 29 января 2017

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

preg_replace("/^.+\\\\/", "", $_SERVER["AUTH_USER"]);
2 голосов
/ 21 декабря 2012

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

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

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

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

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

2 голосов
/ 04 октября 2008

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

1 голос
/ 26 октября 2011

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

Можно сказать getenv('USERNAME')

1 голос
/ 03 октября 2008

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

http://us2.php.net/ldap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...