我有一个托管在 IIS (.svc) 中的每次调用 WCF 服务。在服务的构造函数中,我按照本文设置了Thread.CurrentPrincipal = HttpContext.Current.User。在这种情况下, HttpContext.Current.User属于Microsoft.IdentityModel.Claims.ClaimsPrincipal类型,并且具有从我的自定义被动 STS 发回的声明。
但是,一旦我进入我的服务操作并检查Thread.CurrentPrincipal,虽然该对象仍然是Microsoft.IdentityModel.Claims.ClaimsIdentity类型,但该对象本身不再与HttpContext.Current.User相同(IsAuthenticated = false , AuthenticationType = "" 和 Name 在 Thread.CurrentPrincipal.Identity 上为空),而这些值仍然在HttpContext.Current.User上正确填写。这告诉我,某些东西正在拦截对操作的调用,并将当前主体错误地更改为一些通用的、空的、未经身份验证的声明主体。
我在构造函数和操作中检查了线程 ID,这两个地方都相同,并且在从HttpContext.Current.User分配后立即窗口中评估Thread.CurrentPrincipal表明线程标识在构造函数,所以在构造函数和方法之间肯定会执行某些东西,并且某些东西正在改变我的Thread.CurrentPrincipal。
有谁知道这是在做什么,以及我该如何防止/修复这种行为?