Я реализовал SSO-аутентификацию, используя mod_auth_kerb на Apache. Мой конфиг выглядит так:
<Location /login/ >
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate on
KrbAuthoritative on
KrbVerifyKDC on
KrbAuthRealm D.ETHZ.CH
Krb5Keytab /etc/HTTP.keytab
KrbSaveCredentials on
RequestHeader set KERBEROS_USER %{REMOTE_USER}s
</Location>
Моя проблема в том, что без require valid-user
mod_auth_kerb даже не пытается аутентифицировать пользователя и в KERBEROS_USER
итоге оказывается (null)
. Если я добавлю require valid-user
, пользователь аутентифицируется автоматически, если браузер поддерживает его, но ему отображается уродливая модальная форма входа (аля HTTP Basic Auth), если браузер не поддерживает Kerberos Negotiate.
Чего я хочу добиться, так это того, что, если пользователь заходит /login/
, mod_auth_kerb пытается аутентифицировать пользователя с помощью Kerberos Negotiate. Если это не удается, пользователю будет представлена обычная форма входа в HTML.
Можно ли настроить Apache / mod_auth_kerb таким образом?
источник
Ответы:
Я сделал это однажды, когда создал простой инструмент единой регистрации (чтобы объединить Kerberos с mod_auth_tkt). Это потребовало немного chicanery:
/ webauth / логин был защищен
require valid-user
директивой. Если кто-то связался с действительными учетными данными Kerberos, мы получили его имя пользователя от REMOTE_USER, дали ему файл cookie для проверки подлинности и отправили их по пути.Конфигурация Apache использовала
ErrorDocument
запрос для перенаправления неаутентифицированных пользователей в / webauth / require_authentication:ErrorDocument 401 / webauth / require_authentication
Это будет выполнять следующие действия:
Форма входа в систему будет делать именно то, что вы ожидаете: представить форму имени пользователя / пароля, проверить ее, а затем дать им файл cookie авторизации.
источник