【发布时间】:2020-06-07 11:22:38
【问题描述】:
大家好,早上好,
我目前正在对测试环境中的一个问题进行故障排除,但我无法分析问题出在哪里。
在使用 IIS v10 的 Windows Server 2016 中,我的一个用户服务帐户出现了这个奇怪的问题,我无法用我的或其他任何人重现。
我们都使用我们的 Active Directory 服务帐户通过 VPN 客户端远程访问同一个虚拟机。所以所有的请求都发生在同一个上下文环境中。
为“登录”而命中的 WebAPI 服务也是服务注册表的相同入口。其他服务使用与其 IIS 应用程序池标识用户绑定的匿名身份验证,但对于其他所有人,我们需要使用 Windows 身份验证。这就是他们启用 Windows 身份验证和匿名身份验证的原因。
当 InterceptionAttribute 处理请求时,我们有一点逻辑来计算请求是否来自匿名源。如果是,并且在某些条件/约束下,我们会 401 请求,因为我们希望浏览器使用不同的身份验证方案。当浏览器“Internet Explorer v11”收到 401 时,它会再次尝试,但这次使用 Windows 身份验证并传入当前登录的用户凭据,我们需要这些凭据来获得有效的 Principal / Identity 对象来处理其他事情。
到目前为止,这一切正常,但有一位用户无法进入 Web 应用程序。在调试会话中,我捕获了进来的请求,并且正如预期的那样,第一个请求是匿名的,因为这是浏览器将尝试和使用的第一种形式。下一个预期但未发生的是来自 401 质询的后续请求,然后它使用 Windows 身份验证。
我已经花费了大量时间对此进行调试,并且非常感谢任何有关阻止/停止/中断浏览器发出后续请求的帮助或见解。
再次感谢大家抽出宝贵时间阅读并回复此主题。
Web.config 部分:
<identity impersonate="true" />
<authorization>
<allow users="*" />
</authorization>
<roleManager enabled="true" />
<validation validateIntegratedModeConfiguration="false" />
<directoryBrowse enabled="true" />
<security>
<authentication>
<windowsAuthentication enabled="true" useKernelMode="true">
<providers>
<clear />
<add value="NTLM" />
<add value="Negotiate" />
</providers>
<extendedProtection tokenChecking="Require" />
</windowsAuthentication>
<anonymousAuthentication enabled="true" userName="" />
</authentication>
</security>
【问题讨论】:
标签: c# iis asp.net-web-api2 windows-authentication iis-10