Как сказать mod_auth_kerb, чтобы он выполнял свою работу, несмотря на отсутствие "Требуется действительный пользователь"
Я реализовал 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 таким образом?
1 ответ
Я сделал это однажды, когда создал простой инструмент единой регистрации (чтобы объединить Kerberos с mod_auth_tkt). Это потребовало немного chicanery:
/ webauth / логин был защищен
require valid-user
директивы. Если кто-то подключился с действительными учетными данными Kerberos, мы получили его имя пользователя от REMOTE_USER, дали ему файл cookie для аутентификации и отправили его в путь.Конфигурация Apache использовала
ErrorDocument
запрос на перенаправление неаутентифицированных пользователей в / webauth / require_authentication:ErrorDocument 401 / webauth / require_authentication
Это будет выполнять следующие действия:
- Вернуть код результата 401 (обычно ErrorDocuments использует ваш код результата) и
- Представьте форму входа.
Форма входа в систему будет делать именно то, что вы ожидаете: представить форму имени пользователя / пароля, проверить ее, а затем дать им файл cookie авторизации.