У меня PHP 5.6.17 и Apache 2.4.10, работающие на Debian 8.
Я хочу заполнить переменную PHP $_SERVER['REMOTE_USER']
с именем пользователя Windows, чтобы войти в систему, если имя пользователя находится в моей базе данных. Я согласен с рисками безопасности, связанными с этим методом, так как он будет обнаружен только в локальной сети.
Вот что я сделал в своем определении Apache vhost:
<LocationMatch "/login/ssologin">
PerlAuthenHandler Apache2::AuthenNTLM
AuthBasicAuthoritative on
AuthType ntlm
AuthName "hello"
Require valid-user
PerlAddVar ntdomain "my.local"PerlSetVar defaultdomain my.local
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmauthoritative off
PerlSetVar ntlmdebug 1
</LocationMatch>
Я поместил URL-адрес в надежные сайты в Internet Explorer, но мне все равно было предложено выполнить базовую проверку подлинности.
Что я упустил?
Моя единственная цель — получить имя пользователя сеанса Windows. Есть ли другой, более простой способ?
Во-первых, ваш ntdomain
является неполным. Согласно документации, переменная установлена так:
PerlAddVar ntdomain "my.local PDC_NAME BDC_NAME"
Без контроллера домена для аутентификации valid-user
требование никогда не может быть выполнено.
Во-вторых, Apache2 :: AuthenNTLM не поддерживает аутентификацию NTLM версии 2.
Начиная с Windows Vista и Server 2008, NTLM версии 2 использовался исключительно. Предыдущие версии Windows вернулись бы к версии 1, если сервер не поддерживал версию 2. Хотя вы можете изменить политику безопасности, чтобы вернуться к старому поведению, это очень опасно.
Как уже упоминалось в этот ответ, есть модуль Python это обрабатывает аутентификацию NTLM версии 2. Очевидно, что это потребует установки mod_python
но довольно прост в настройке.
Наконец, настройка автоматического входа требует больше, чем добавление его в список доверенных сайтов. Вы должны поместить его в зону интрасети и убедиться, что для этой зоны включен автоматический вход в систему (например, параметры безопасности со средним и низким уровнем безопасности).
Других решений пока нет …