.NET Core 3.1 User.Identity.Name通过Windows身份验证始终为空

时间:2020-09-29 18:12:44

标签: asp.net-core

我正在将Windows身份验证与.net core 3.1应用程序一起使用。我想检索当前用户名,但它始终为null。我还无法将该应用程序部署到IIS,因此在使用IISExpress进行调试时会发生这种情况。

launchSettings.json:

{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,    
    "iisExpress": {
      "applicationUrl": "http://localhost:52362",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Startup.cs:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication(IISDefaults.AuthenticationScheme);
            services.AddAuthorization();

            services.AddHttpContextAccessor();
            services.AddMvc();
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        }
        
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseAuthentication();
            app.UseRouting();
            app.UseAuthorization();
        }

控制器:

[Authorize]
[ApiController]
[Route("[controller]")]
public class FilingController : Controller
{
    private readonly string _currentUserName;
    public FilingController(IHttpContextAccessor accessor)
    {
        //This is always null
        _currentUserName = accessor.HttpContext.User.Identity.Name;
    }
}

这是Program.cs:

public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseIISIntegration();
                    webBuilder.UseIIS();
                });
    }

这在成功登录后发生。为什么Name为null,如何解决?

1 个答案:

答案 0 :(得分:0)

看起来像是How does HttpContext.Current.User.Identity.Name know which usernames exist?的可能副本

在Visual Studio解决方案资源管理器中-单击Web应用程序项目->在底部选择“属性”选项卡。确保具有以下设置:

匿名身份验证|禁用

Windows身份验证|已启用

我已经在您的代码中看到您已设置

“ iisSettings”:{ “ windowsAuthentication”:是的, “ anonymousAuthentication”:false,

但是,下面的验证步骤将检查是否已根据已配置的iisSettings设置了匿名身份验证和Windows身份验证-如果没有,那就是问题所在

验证步骤:

  1. 选择您的项目。
  2. 按F4
  3. 检查是否禁用了“匿名身份验证”并且启用了“ Windows身份验证”