2

我有一个非常普通的 spnego SSO 设置,它针对 Active Directory 服务器进行身份验证。IE SSO 包含 NEGOTIATE 标头 cookie,该 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>
4

1 回答 1

3

这不是解释为什么它会弹出两次,而是一种在 chrome 中调试它的方法。

浏览到chrome:net-internals#events可以看到 401 auth 协商。401 请求和响应没有出现在 chrome 开发工具的网络选项卡中,因此这是您可以获得的唯一线索。

编辑更新- Chrome 似乎并不总是Authorization发送digest. 可能是由于流水线、身份验证缓存错误或 URL“继承”授权的启发式方法。

来自https://groups.google.com/d/msg/chromium-discuss/9ASzOBdBrTQ/wUWFlwFYwaMJ

由于 Chromium 不会抢先发送对推断保护空间的授权,因此它将继续进入该循环。

[...]

可能支持摘要,但有点粗略,因为摘要身份验证模型在流水线下被破坏(下一个随机数由先前的服务器响应(授权信息)控制。

因为 htdigest 每次加载页面都会导致两个登录对话框,所以我切换到基本身份验证,因为我的网站已经在使用HTTPS安全性。Basic 和 Digest 没有定义Authorization需要发送令牌的 url 以及缓存密码或令牌多长时间的方案。因此,它比 cookie 更慢且更不安全。我以后会尽量避免这种方案。

于 2017-10-05T00:56:36.840 回答