我可以按照执行可选Kerberos协商的方式配置Mod_auth_kerb(http://modauthkerb.sourceforge.net/configure.html):
如果浏览器配置为协商Mod_auth_kerb将执行协商并将对用户进行身份验证(并发送REMOTE_USER
)
如果浏览器未配置为协商,则Mod_auth_kerb将不执行身份验证,并将发送不带REMOTE_USER
的请求。稍后,应用程序将执行请求的身份验证。
重要的是,Mod_auth_kerb不应返回401 NEGOTIATE。
答案 0 :(得分:2)
我的猜测是,你试图解决的真正问题是Internet Explorer的破解。对于其他所有浏览器,您只需在Apache配置中设置错误重定向即可。
<Location /login-spnego>
AuthType Kerberos
require valid-user
KrbMethodNegotiate on
KrbMethodK5Passwd off
Krb5Keytab /etc/httpd/conf/keytab
ErrorDocument 401 /login-simple
</Location>
然而,如果IE尚未配置为允许kerberos auth到相关网站并且从不显示401文档,则进入死亡螺旋。我找到的唯一解决此问题的方法是使用基于HTTP_USER_AGENT
的mod_rewrite规则。
# IE fails hard if the user does not have a tgt for SPNEGO
# and either attempts NTLM or fails altogether depending on
# exact version. Redirect all IE login attempts to
# form rather than attempt pass-thru SPNEGO login.
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*MSIE
RewriteRule ^/login-spnego/ /login-simple/ [PT]
这并没有真正解决你的问题,但据我所知,根本没有办法做你想要的,而不是重写mod_auth_kerb的代码。