401 - 在 IE7 中未经授权,仅使用 Windows 身份验证。
Posted
技术标签:
【中文标题】401 - 在 IE7 中未经授权,仅使用 Windows 身份验证。【英文标题】:401 - Unauthorized in IE7 only with windows authentication. 【发布时间】:2011-11-03 13:51:17 【问题描述】:我创建了一个使用 Windows 身份验证的 Intranet 站点
在 chrome 中我可以立即访问该站点,而在 FF 中它需要 Active Directory 登录。 但使用 IE7 时出现以下错误:
401 - 未经授权:由于凭据无效,访问被拒绝。 您无权使用您提供的凭据查看此目录或页面。
我不确定为什么它在其他浏览器中可以,但在 IE 中不行? 任何帮助表示赞赏。
谢谢
【问题讨论】:
您是否在 IE 的“高级”设置中确认设置了“启用集成 Windows 身份验证”?您是否在 IE7 中验证了您的网页大小位于哪个区域?你可以在底部看到它。您可以重置当前的 IE 区域设置。是仅在一台计算机上出现问题,还是在您网络中的所有/多台计算机上出现问题? 这里描述了可能的解决方案***.com/questions/7337054/… Raklos:如果@aditya 的回答解决了您的问题,您能否接受它作为正确的回答(或任何其他回答,如果有帮助的话)。 【参考方案1】:解决方案:
IE 正在使用 Kerberos,而不是像 Chrome 和 Firefox 那样依赖 NTLM。您必须按照以下步骤在 IIS7.5 中强制执行 NTLM 身份验证:
-
选择您的网站。
双击身份验证。
选择“Windows 身份验证”(确保已启用)。
点击右侧栏中的“Providers...”。
选择 NTLM 并点击“上移”。
链接:windows authentication not working in ie7
【讨论】:
【参考方案2】:我对 IIS 不熟悉,但在过去的几周里,我在将 AD 登录集成到 Web 应用程序方面有很多实践经验。这是非常合乎逻辑的 - 每个 Microsoft 产品都可以更好地与另一个这样的产品集成,只要您使用 Active Directory 作为 Windows 登录身份验证方法,Internet Explorer(应该对所有版本都有效,而不仅仅是 7)会自动传递您的 AD 登录凭据.
其他所有浏览器要么需要进行配置,要么要求您手动输入,要么根本不支持。这就解释了为什么 Firefox 会要求您输入用户名和密码。在 Opera 下,您很可能会收到相同的错误消息。
我对 Chrome 的猜测是,它是您选择的默认浏览器,并且在某个时间点,您输入了登录凭据,并且该会话仍然处于活动状态。
所有这一切都意味着(如果我的假设是正确的)您需要使用与 Windows 不同的 AD 帐户登录此应用程序,而后者(由 IE 自动传递)未获得授权。
【讨论】:
我要求另一个用户登录,他们面临同样的问题。 ie7 也不适用于他们(其他浏览器可以)。我没听懂你的最后一句话。 IE8 或 IE9 能用吗?我在最后一句话中所说的是,基本上 IE 会自动将您用于登录 Windows 的任何用户名传递给 Web 服务器,但该用户名与您想用于 Web 应用程序的用户名不同。【参考方案3】:听起来您的环境设置不正确,无法进行 Kerberos 身份验证。有很多事情会导致 Kerberos 身份验证失败。例如。服务器或客户端上的时钟偏差、Web 服务器上缺少 SPN 等。
通常,当您配置为使用 Windows 身份验证时,您会要求使用 SPNEGO,这意味着尽可能使用 Kerberos,然后在 Kerberos 失败时回退到 NTLM。然而,这个post 指出这不再是真的。 IE7 在某些情况下会停止在 Kerberos,但不会退回到 NTLM。
您可以尝试按照post 的建议禁用“启用集成 Windows 身份验证”。看起来很奇怪,但实际上只是关闭了 SPNEGO,您仍将使用 NTLM。
我猜 Firefox 和 Chrome 可以正常工作,因为它们使用的是 NTLM 而不是 Kerberos。根据我的经验,非 Microsoft 浏览器不支持开箱即用的 Kerberos。你需要做一些配置工作才能让它发生。例如,在 FireFox 中,您需要设置 network.negotiate-auth.trusted-uris 参数。见here
一旦您确认 IE7 的 NTLM 仍然可以正常工作。然后,您可以发布另一个问题,询问如何解决 IIS 的 Kerberos 身份验证问题。
【讨论】:
【参考方案4】:首先查看here 并获取更详细的错误描述。我在使用 CRM 时遇到了一些疯狂的问题,这一切都归结为 IIS 中的设置顺序,问题的答案最终变得如此简单; 进入 iis,然后进入身份验证设置 单击Windows身份验证并选择高级 确保内核模式已打开 点击提供商并确保协商高于 NTLM。
【讨论】:
是否有 iis 7 的等效文章? 在这里尝试learn.iis.net/page.aspx/267/… 或在这里trainsignal.com/blog/iis-7-troubleshooting 用于iis7。无论如何,您的日志字段应该仍然可以在 iis 7 中查看以上是关于401 - 在 IE7 中未经授权,仅使用 Windows 身份验证。的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 Asp.Net CORE 中使用 JWT 获得 401 未经授权?
Spring Security 测试返回 401(未经授权)