Как сказать mod_auth_kerb, чтобы он выполнял свою работу, несмотря на отсутствие «требовать действительного пользователя»

11

Я реализовал 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-usermod_auth_kerb даже не пытается аутентифицировать пользователя и в KERBEROS_USERитоге оказывается (null). Если я добавлю require valid-user, пользователь аутентифицируется автоматически, если браузер поддерживает его, но ему отображается уродливая модальная форма входа (аля HTTP Basic Auth), если браузер не поддерживает Kerberos Negotiate.

Чего я хочу добиться, так это того, что, если пользователь заходит /login/, mod_auth_kerb пытается аутентифицировать пользователя с помощью Kerberos Negotiate. Если это не удается, пользователю будет представлена ​​обычная форма входа в HTML.

Можно ли настроить Apache / mod_auth_kerb таким образом?

Бенджамин Вольвенд
источник
Запрет на предоставление формы входа в систему и соответствующей обработки ошибок, это правильное (ожидаемое) поведение.
BillThor

Ответы:

12

Я сделал это однажды, когда создал простой инструмент единой регистрации (чтобы объединить 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 авторизации.

larsks
источник
+1 за интересное решение.
Сэм Халике
отлично, это работает отлично!
Бенджамин Волвенд