在 MVC5 之前,我听说过/能够重现过去使用异步操作时 Thread.CurrentPrincipal 并不总是正确设置的问题。这是一篇讨论该问题的博客文章:http ://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx
现在,我已经使用 .NET 4.5.2 上的 OWIN 中间件在一个新的 Web API 项目中设置了身份验证(使用令牌身份验证提供程序)。Web API 的控制器主要由调用另一个业务层程序集的异步操作组成。我想使用 ClaimsPrincipalPermission 属性来保护对该程序集方法的调用。此属性与检查访问权限的 ClaimsAuthorizationManager 一起使用。我假设在幕后这使用了 Thread.CurrentPrincipal,所以我怀疑我是否会遇到 Thread.CurrentPrincipal 与原始 Web API 调用者不匹配的问题。
我可能会遇到同样的问题吗?到目前为止,我还没有复制它,但我不相信这个问题实际上已经解决了。我认为我更有可能只是还无法重现仍然存在的问题。
参考: