Thread.CurrentPrincipal.Identity.Name vs OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name

时间:2014-04-29 04:56:05

标签: c# wcf authentication windows-authentication

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在某些情况下,这两个值可能会有所不同。 OperationContext.Current.ServiceSecurityContext.WindowsIdentity是更可靠的来电者身份来源(如果可用)。

OperationContext.Current.ServiceSecurityContext.WindowsIdentityThread.CurrentPrincipal.Identity都继承自IIdentity。如果您的问题确实是单元测试:

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