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

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

我有一个有效的 Kerberos SSO 设置,我使用带有 mod_jk 的 apache 和 jboss。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/[email protected]  
Krb5Keytab         /etc/krb/krb5.keytab  
KrbVerifyKDC       on  
KrbAuthoritative   on  
require            valid-user  
#ErrorDocument 401  /login.htm  
</Location>

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

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

任何帮助或替代解决方案都将受到赞赏。

提前感谢
Pierre

答案1

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

ErrorDocument 401 "<html><meta http-equiv=\"refresh\" content=\"0;url=/login.htm\"></html>"

这将仅当用户单击浏览器对话框中的“取消”时才发生重定向。

答案2

我相信你想要ErrorDocument 403。当服务器要求身份验证时返回 401,当客户端无法提供身份验证时返回 403。至少在设置 x.509 身份验证时是这样。

答案3

你也可以这样做:

ErrorDocument 401 /redirect-to-login
RewriteRule ^/redirect-to-login$ /login.html [R]

相关内容