Как сказать 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 авторизации.

Другие вопросы по тегам