WindowsIdentity.GetCurrent()。Name间歇返回“ NT AUTHORITY \ SYSTEM”

时间:2019-05-09 14:37:30

标签: c# wcf windows-authentication

我有一个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"并尝试了以下步骤:

  1. 已禁用匿名身份验证。
  2. 启用Windows身份验证和ASP.NET模拟。
  3. 尝试使用HttpRequest类中的属性,但这也不起作用。
  4. 在web.config中,将web.config中的aspNetCompatibilityEnabled设置为true。
  5. 在服务实现类中,将AspNetCompatibilityRequirements设置为允许。

代码段如下:

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”,而其他时候返回“域名\用户名”。请建议我应该进行哪些更改以使该功能始终如一。

0 个答案:

没有答案