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

SSO - получить имя пользователя AD с помощью Apache

У меня есть 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. Есть ли другой, более простой способ?

4b9b3361

Ответ 1

Во-первых, ваш 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, но довольно просто настроить.

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