【问题标题】:Authentication issues with WWW-Authenticate: NegotiateWWW-Authenticate 的身份验证问题:协商
【发布时间】:2011-05-15 00:54:40
【问题描述】:

我正在尝试访问受密码保护的网站。它没有使用基本身份验证(即使在 Firefox 中弹出相同的用户/密码框),因为响应标头是 WWW-Authenticate: Negotiate

我想通过发送正确的标头来自动化登录过程。

基本上你会使用类似的东西:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

我会用什么来谈判?

【问题讨论】:

  • WWW-Authenticate: Negotiate 标头意味着服务器可以使用 NTLM 或 Kerberos(至少在 Windows 7 和 Win 2008 Server 之前的操作系统上,当添加了额外的安全支持提供程序时)进行身份验证和加密。在这种 NTLM 情况下,协商需要在建立安全会话之前交换多个消息(质询/响应),因此从一开始就没有“正确的标头”要发送。您可以找到有关您的问题的详细信息msdn.microsoft.com/en-us/library/aa378748%28VS.85%29.aspx(Microsoft 提供的 SSP 包)。

标签: authentication header http-headers http-authentication


【解决方案1】:

将这些信息放在这里是为了让未来的读者受益。

  • WWW-Authenticate: Basic-> 授权:基本 + 令牌 - 用于基本身份验证
  • WWW-Authenticate: NTLM-> 授权:NTLM + 令牌(2 个挑战)
  • WWW-Authenticate: Negotiate -> 授权:协商 + 令牌 - 用于 Kerberos 身份验证
    • 顺便说一句:IANA 有这个angry remark about Negotiate这个身份验证方案违反了 HTTP 语义(面向连接)和语法(使用与 WWW-Authenticate 和 Authorization 标头字段语法不兼容的语法)。

只有在您的 401 质询中也有 WWW-Authenticate: Basic 标头时,您才能设置 Authorization: Basic 标头。

但既然你有WWW-Authenticate: Negotiate,这应该是基于 Kerberos 的身份验证的情况。

【讨论】:

    【解决方案2】:

    Web 服务器提示您输入 SPNEGO(简单且受保护的 GSSAPI 协商机制)令牌。

    这是 Microsoft 的一项发明,用于协商一种用于 Web SSO(单点登录)的身份验证:

    • 任一 NTLM
    • 或 Kerberos。

    见:

    【讨论】:

    • 在我正在使用的一个应用程序中,ADFS 服务器在响应中使用两个 WWW-Authenticate 标头字段进行响应,其值为 WWW-Authenticate: Negotiate WWW-Authenticate: NTLM 第一个标头是什么跟“谈判”是什么意思?从提琴手如何才能弄清楚最终使用了什么身份验证协议?
    • 评论太旧了。回复未来的读者。您可以检查提琴手以验证正在使用哪种身份验证机制。我认为您的服务器启用了 Kerberos 和 NTLM 身份验证。从提琴手你可以很容易地验证正在使用的身份验证。检查浏览器对 401 质询的响应标头(这是一个请求标头)。如果其中包含 Authorization: NTLM + token 那么它就是 NTLM 身份验证。在 Authorization: Negotiate + token 的情况下,它应该是 kerberos。注意 NTLM 有不止一个 401 挑战。
    猜你喜欢
    • 2015-01-10
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多