我有WCF服务使用Windows身份验证对用户进行身份验证,直到昨天我使用OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name来获取当前用户使用该服务但很难对其进行单元测试,因此我切换到了Thread。 CurrentPrincipal.Identity.Name用于检索使用该服务的用户。我的问题是,在某些环境中两者之间是否存在差异?
答案 0 :(得分:0)
Thread.CurrentPrincipal.Identity可能不是您的WCF的经过身份验证的用户。它可能是正在执行WCF工作线程的标识。例如,如果您在IIS中托管WCF,则可能是IIS用户。
答案 1 :(得分:0)
在某些情况下,这两个值可能会有所不同。 OperationContext.Current.ServiceSecurityContext.WindowsIdentity
是更可靠的来电者身份来源(如果可用)。
但OperationContext.Current.ServiceSecurityContext.WindowsIdentity
和Thread.CurrentPrincipal.Identity
都继承自IIdentity
。如果您的问题确实是单元测试:
System.Security.Principal.IIdentity
。 Thread.CurrentPrincipal
时,在WCF服务中运行时使用OperationContext.Current.ServiceSecurityContext
。