我有一个Windows Server 2016的IIS 10下运行的WCF服务。在该服务中,我正在使用模拟对下游系统进行调用。对于模拟,使用 WindowsIdentity.GetCurrent()。Name 获得身份。当多个用户连接到WCF服务时,其中一些身份显示为“ NT AUTHORITY \ SYSTEM”,而其他用户身份显示为“域名\用户名”。我想了解为什么其中一些显示为“ NT AUTHORITY \ SYSTEM”。
我已经通过Getting the name of the current Windows user returning "IIS APPPOOL/Sitename"并尝试了以下步骤:
代码段如下:
WindowsIdentity winId = ServiceSecurityContext.Current.WindowsIdentity;
if (winId != null)
{
if (winId.IsAuthenticated)
{
if ((ServiceSecurityContext.Current.WindowsIdentity.ImpersonationLevel == TokenImpersonationLevel.Impersonation)
|| (ServiceSecurityContext.Current.WindowsIdentity.ImpersonationLevel == TokenImpersonationLevel.Delegation))
{
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
......
我尝试使用 System.Web.HttpContext.Current.User.Identity.Name ,但是当连接多个用户时,它也会间歇性地返回“ NT AUTHORITY \ SYSTEM”。
我希望属性每次都返回“域名\用户名”,但有时返回“ NT AUTHORITY \ SYSTEM”,而其他时候返回“域名\用户名”。请建议我应该进行哪些更改以使该功能始终如一。