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 可能不是 WCF 的经过身份验证的用户。它可以是执行 WCF 工作线程的标识。例如,如果在 IIS 中承载 WCF,则可能是 IIS 用户。
在某些情况下,这两个值可能不同。 OperationContext.Current.ServiceSecurityContext.WindowsIdentity
是呼叫者标识的更可靠来源(如果可用(。
但是,OperationContext.Current.ServiceSecurityContext.WindowsIdentity
和Thread.CurrentPrincipal.Identity
都继承自IIdentity
。如果你的问题真的是单元测试:
- 将代码依赖项更改为
System.Security.Principal.IIdentity
。 - 当单元测试使用
Thread.CurrentPrincipal
以及在 WCF 服务中运行时,请使用OperationContext.Current.ServiceSecurityContext
。