为什么基本的AUTH框在Chrome中弹出两次,而不是在spnego SSO中弹出两次

时间:2013-12-30 16:55:13

标签: java single-sign-on spnego

我有一个漂亮的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>

1 个答案:

答案 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慢,安全性低。我将来会尝试避免这种方案。