如何在 Kerberos SSO 登录失败时设置 apache 重定向或自定义 401 文档

6 kerberos jboss apache-2.2

我有一个有效的 Kerberos SSO 设置,我将 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>
Run Code Online (Sandbox Code Playgroud)

这 100% 有效,我能够使用 Kerberos/SSO 登录并读取我的 java 应用程序中的 remote_user 变量。

现在的问题是,如果用户无法通过 Kerberos/SSO 登录,我想重定向到不受保护的 login.htm。我想到的解决方案是设置 401 ErrorDocument,但是当我通过在上面的代码中取消注释 #ErrorDocument 401 来设置它时,它总是重定向到 login.htm,因为返回 401 以请求用户凭据本质上是 Kerberos 的一部分/SSO 身份验证过程。因此,结果是用户总是以 login.htm 结束并且永远不会完成 Kerberos/SSO 登录过程。

任何帮助或替代解决方案将不胜感激。

提前致谢
皮埃尔

小智 6

为了不中断 Kerberos/SSO 身份验证过程,请使用以下内容:

ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=/login.htm\"></html>"
Run Code Online (Sandbox Code Playgroud)

这将导致仅当用户在浏览器对话框中单击取消时才会发生重定向。