Назад | Перейти на главную страницу

Как сказать 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?

Я сделал это один раз, когда создал простой инструмент единой регистрации (для объединения Kerberos с mod_auth_tkt). Потребовалось немного ухищрений:

  • / webauth / логин был защищен require valid-user директива. Если кто-то подключался с действительными учетными данными Kerberos, мы получали его имя пользователя от REMOTE_USER, давали ему файл cookie аутентификации и отправляли его по пути.

  • В конфигурации Apache использовался ErrorDocument запрос на перенаправление неаутентифицированных пользователей на / webauth / require_authentication:

    ErrorDocument 401 / webauth / require_authentication

    Это приведет к следующим действиям:

    • Вернуть код результата 401 (обычно ErrorDocuments съедает ваш код результата) и
    • Представьте форму входа.
  • Форма входа будет делать именно то, что вы ожидаете: представить форму имени пользователя / пароля, подтвердить ее, а затем передать им cookie аутентификации.