如何在Kerberos SSOlogin失败时设置Apacheredirect或自定义401文档

我有一个工作的Kerberos SSO设置,我用mod_jk使用apache和jboss。 Apache正在使用以下configuration来保护(通过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 / SSOlogin,并阅读我的Java应用程序中的remote_uservariables。

现在的问题是,如果用户无法通过Kerberos / SSOlogin,我想redirect到一个不受保护的login.htm。 我想到的解决scheme是设置一个401 ErrorDocument,但是当我通过在上面的代码中取消注释#ErrorDocument 401来设置它时,它始终会redirect到login.htm,因为返回401来请求用户凭据本质上是Kerberos的一部分/ SSO身份validation过程。 因此,结果是用户总是以login.htm结尾,并且从不完成Kerberos / SSOlogin过程。

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

提前致谢
皮埃尔

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

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

这将导致redirect仅在用户单击浏览器对话框上的取消时发生。

我相信你想要ErrorDocument 403 。 当服务器请求authentication时返回401,当客户端未能提供authentication时返回403。 设置x.509身份validation时,这至less是正确的。