Может ли внутренняя сеть PHP совместно использовать учетные записи Windows?

Я создал несколько ресурсов интрасети на основе PHP, которые требуют, чтобы пользователи регистрировались. Пользователи создают свои собственные логины, и я проверяю, что они вошли в систему, используя файл cookie.

Меня спросили, могу ли я связать этот логин с их именем Windows. Мой первоначальный ответ заключался в том, что «веб-страница не может получить доступ к вашему учетному имени Windows – это будет угрозой безопасности». Но один из наших отделов использует Sharepoint, и он фактически привязывается к входу Windows.

Как это делается? Могу ли я сделать это в PHP? Если да, то почему это не ужасная дыра в безопасности?

То, что вы ищете, – это аутентификация NTLM на веб-сайте PHP, что отлично выполнимо, но, похоже, для PHP нет единого пути в PHP.

Взгляните на http://siphon9.net/loune/2007/10/simple-lightweight-ntlm-in-php/

Вам также нужно добавить сайты на свои надежные сайты в IE (или эквивалент в зависимости от того, какой браузер вы используете) и в настройках доверенных сайтов включить «отправить текущее имя пользователя и пароль».

Это не ужасное отверстие безопасности, потому что учетные данные не отправляются по кабелю, и конечный пользователь специально сказал браузеру отправлять учетные данные на соответствующий веб-сайт.

PHP поддерживает LDAP, поэтому вы можете получить доступ к Windows Active Directory

Это проект на SourceForge: adLDAP – «Аутентификация LDAP с PHP для Active Directory»

Часто это делается с использованием комбинации LDAP и NTLM. Браузеры, такие как IE и Firefox, могут выполнять аутентификацию NTLM, и я считаю, что работает SharePoint. Я запускаю приложение на базе Java, которое использует LDAP для синхронизации пользователей и NTLM для аутентификации.

То, что вы абсолютно не хотите делать, – это ввести пользовательское имя пользователя и пароль в браузер. В прошлые годы я видел несколько проектов, использующих этот подход с LDAP для аутентификации пользователей Windows. Вы правы, это проблема безопасности. Пользователь должен ввести свой пароль только один раз: при входе на рабочую станцию. Последнее, что вы хотите, это пароли, сидящие в файлах cache / temp.

Я прошу прощения, что я не могу предоставить ответ «вот как это сделать с помощью приложения PHP». Насколько я знаю, ответа на эту проблему нет.

(Одна вещь, которую я делал в прошлом, и я никогда не проверял, была ли она действительной или плохой формой, заключалась в использовании PHP из IIS. Если вы используете IIS, тогда PHP будет заполнять переменную сервера REMOTE_USER с помощью Windows пользовательское имя пользователя (DOMAIN \ user). Оно работало на то, что я делал в то время.)