我有一个漂亮的vanilla spnego SSO设置,它针对Active Directory服务器进行身份验证。 IE SSO包含NEGOTIATE头cookie,它正确地进行身份验证,而不会提示用户。 Firefox和Chrome不包含SSO cookie,因此无法恢复到基本身份验证。他们确实收到了正确的用户名和密码,并正确登录。
然而,我的一个小麻烦是它在Firefox中提示一次,但在Chrome中它会提示输入密码两次。
有关为何可能两次提示的任何想法?
以下设置完整性:
<filter>
<filter-name>SpnegoHttpFilter</filter-name>
<filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class>
<init-param>
<param-name>spnego.allow.basic</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.localhost</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.unsecure.basic</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.login.client.module</param-name>
<param-value>spnego-client</param-value>
</init-param>
<init-param>
<param-name>spnego.krb5.conf</param-name>
<param-value>xxxxxxxxxxxxx/krb5.conf</param-value>
</init-param>
<init-param>
<param-name>spnego.login.conf</param-name>
<param-value>xxxxxxxxxxxx/login.conf</param-value>
</init-param>
<init-param>
<param-name>spnego.preauth.username</param-name>
<param-value>xxxxxxxxxxxxxxxx</param-value>
</init-param>
<init-param>
<param-name>spnego.preauth.password</param-name>
<param-value>xxxxxxxxxxxxxxxx</param-value>
</init-param>
<init-param>
<param-name>spnego.login.server.module</param-name>
<param-value>spnego-server</param-value>
</init-param>
<init-param>
<param-name>spnego.prompt.ntlm</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>spnego.allow.delegation</param-name>
<param-value>true</param-value>
</init-param>
</filter>
答案 0 :(得分:2)
这不是解释为什么它会弹出两次,但这是一种在chrome中调试它的方法。
浏览 chrome:net-internals#events ,您可以看到401 auth协商。 401请求和响应不会出现在chrome dev工具的网络选项卡中,因此这是您可以获得的唯一线索。
修改更新 - Chrome似乎并不总是为Authorization
发送digest
标头。要么是因为流水线操作,要么是auth缓存错误,要么是urls&#34;继承&#34;授权。
来自https://groups.google.com/d/msg/chromium-discuss/9ASzOBdBrTQ/wUWFlwFYwaMJ
由于铬不会先发制人地授权 推断保护空间,它将继续进入该循环。
[...]
支持摘要很可能,但有点粗略,因为摘要 auth模型在流水线下被破坏(下一个nonce由 以前的服务器响应(授权信息)。
因为htdigest导致每个页面加载两个登录对话框,所以我切换到基本身份验证,因为我的网站已经使用HTTPS
来保证安全性。 Basic和Digest不定义需要发送Authorization
令牌的URL以及缓存密码或令牌的时间长度的方案。因此它比cookie慢,安全性低。我将来会尝试避免这种方案。