我有一个通过 Windows Server 2012 上的 IIS 8.5 发布的程序,可以利用 Windows 集成凭据进行 SSO。用户可以成功登录该程序并导航到绝大多数 aspx 页面。但是,当用户尝试登录某个特定的 aspx 页面时,他们会收到 Windows 身份验证提示,提示他们必须填写域凭据 10 次,然后才能访问该页面。
从 IIS 的角度来看,对于应用程序的虚拟目录,我们仅指定了 Windows 身份验证。如果我打开匿名身份验证(用户尝试导航到 aspx 页面时不会收到 Windows 身份验证提示),我可以解决这个问题,但这显然会破坏最终用户使用 Windows 集成凭据登录的能力——这对他们来说是不可接受的。因此,我怀疑这是 ASPX 页面或应用程序的 DLL 之一的 NTFS/共享权限存在某种问题。但是,我已经检查了所有相关的平面文件权限,但无济于事。
我已完成以下操作:-我已检查用户尝试访问的 aspx 页面的权限,从 AD 角度来看,一切似乎都正常。用户似乎拥有正确的权限。-直接登录应用服务器时不会发生此问题。-域管理员通过客户端工作站登录应用程序时也会遇到此问题。-运行 Fiddler 和 Wireshark 跟踪,正如预期的那样,我遇到了 401 错误。-使用非 Windows 凭据集成到应用程序的用户不会发生此问题。
对于可以检查的事情,我几乎没有想法了——还有其他人有什么想法吗?
答案1
因此,错误描述如下:
HTTP 错误 401.2 - 未经授权:由于服务器配置,访问被拒绝。
基本上,您的客户端期望一种类型的身份验证,而服务器未配置为提供该类型,因此在客户端 - 服务器尝试协商身份验证方法的初始通信期间身份验证会失败。
根据我的经验,这通常是与 Kerberos 相关的问题,如果不是因为其他原因,默认设置似乎包括处于非功能状态的 Kerberos 身份验证……所以我首先会查看这一点。具体来说,请确保如果 IIS 在域服务帐户下运行,则您已注册 SPN(服务主体名称),您的描述让我相信您不这么认为。
当然,也可能是授权问题,其中有一些知识库,甚至非 Kerberos 身份验证问题。
很有趣,对吧?万一这些都对你没用,这是我从 2003 年就保留下来的好东西,但仍然适用于基本身份验证故障排除。如果没有其他用途,它应该可以帮助您缩小问题范围,或者通过强制每个人都采用更简单的身份验证方法来解决这个问题。
答案2
在 IE 设置中找到了此问题的最终解决方案。当我们选中每次访问时检查存储页面的较新版本的选项时,此问题便消失了。重新启用该选项后,问题又出现了。