wcf - ASP.Net WCF 服务的 Thread.CurrentPrincipal 被联合 (WIF) 环境中的某些拦截器丢弃

标签 wcf wif claims federation

我有一个托管在 IIS (.svc) 中的每次调用 WCF 服务。在服务的构造函数中,我按照 this article 设置了 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。

有没有人知道这是做什么的,我该如何预防/修复这种行为?

最佳答案

我刚刚遇到了类似的问题。我在 WCF 服务的构造函数中设置了我的自定义主体。当我离开构造函数并进入我调用的方法时,thread.currentprincipal 被一个空的覆盖。我通过添加以下行为解决了这个问题:

<serviceAuthorization principalPermissionMode="None"></serviceAuthorization>

这对我来说很好。

关于wcf - ASP.Net WCF 服务的 Thread.CurrentPrincipal 被联合 (WIF) 环境中的某些拦截器丢弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1932424/

相关文章:

.net - .NET在三个 namespace 中的声明

c# - 在类级别和方法级别应用 ClaimsPrincipalPermissionAttribute 时出现异常

facebook - ASP.NET Core Facebook 身份验证中间件用户图片

.net - 在 Silverlight 和 "plain vanilla".Net 之间共享程序集

wcf - 在 Windows Server 2008 R2 上运行 MSDN PeerChannel "SecureChat"

c# - 在基元列表上使用 DataContractSerializer 的自定义元素名称

c# - 在 WCF 服务方法中上传文件

c# - 如何以编程方式将受众 uri 传递给 AudienceUriElementCollection?

asp.net-web-api - Web API 和 .NET 4.5 : Claims and rights

asp.net-mvc - 是否可以访问客户的 claim ?