У меня есть работающая настройка единого входа Kerberos, я использую apache и jboss с mod_jk. Apache защищает (с помощью kerberos) страницу auto-login.htm со следующей конфигурацией:
<Location /auto-login.htm>
AuthType Kerberos
AuthName "Kerberos Active Directory Login"
KrbMethodNegotiate on
KrbMethodK5Passwd on
KrbAuthRealms KRB.SOMEDOMAIN.COM
KrbServiceName HTTP/server.somedomain.com@KRB.SOMEDOMAIN.COM
Krb5Keytab /etc/krb/krb5.keytab
KrbVerifyKDC on
KrbAuthoritative on
require valid-user
#ErrorDocument 401 /login.htm
</Location>
Это работает на 100%, и я могу войти в систему с помощью Kerberos / SSO и прочитать переменную remote_user в моем приложении Java.
Теперь проблема в том, что я хочу перенаправить на незащищенный login.htm, если пользователь не смог войти в систему через Kerberos / SSO. Решение, которое я имел в виду, заключалось в том, чтобы установить 401 ErrorDocument, однако, когда я установил это, раскомментировав #ErrorDocument 401 в приведенном выше коде, он всегда перенаправлялся на login.htm, поскольку возвращение 401 для запроса учетных данных пользователя по своей сути является частью Kerberos / Процесс аутентификации SSO. Таким образом, в результате пользователи всегда попадают на login.htm и никогда не завершают процесс входа в систему Kerberos / SSO.
Любая помощь или альтернативное решение будет оценено по достоинству.
заранее спасибо
Пьер
Чтобы не прерывать процесс аутентификации Kerberos / SSO, используйте следующее:
ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=/login.htm\"></html>"
Это вызовет перенаправление только тогда, когда пользователь нажимает кнопку отмены в диалоговом окне браузера.
Я верю ты хочешь ErrorDocument 403
. 401 возвращается, когда сервер запрашивает аутентификацию, 403 возвращается, когда клиент не может обеспечить аутентификацию. По крайней мере, это верно при настройке аутентификации x.509.