Thread.CurrentPrincipal.Identity.Name vs OperationContext.Cu

本文关键字:OperationContext Cu vs Name CurrentPrincipal Identity Thread | 更新日期: 2023-09-27 18:00:34

我有 WCF 服务,该服务使用 Windows 身份验证对用户进行身份验证,直到昨天我使用 OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name 来获取当前用户使用该服务,但很难对其进行单元测试,所以我切换到 Thread.CurrentPrincipal.Identity.Name 来检索使用该服务的用户。我的问题是,在某些环境中,两者之间是否有任何区别?

Thread.CurrentPrincipal.Identity.Name vs OperationContext.Cu

Thread.CurrentPrincipal.Identity 可能不是 WCF 的经过身份验证的用户。它可以是执行 WCF 工作线程的标识。例如,如果在 IIS 中承载 WCF,则可能是 IIS 用户。

在某些情况下,这两个值可能不同。 OperationContext.Current.ServiceSecurityContext.WindowsIdentity是呼叫者标识的更可靠来源(如果可用(。

但是,OperationContext.Current.ServiceSecurityContext.WindowsIdentityThread.CurrentPrincipal.Identity都继承自IIdentity。如果你的问题真的是单元测试:

  1. 将代码依赖项更改为System.Security.Principal.IIdentity
  2. 当单元测试使用 Thread.CurrentPrincipal 以及在 WCF 服务中运行时,请使用 OperationContext.Current.ServiceSecurityContext