我正在将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,如何解决?
答案 0 :(得分:0)
看起来像是How does HttpContext.Current.User.Identity.Name know which usernames exist?的可能副本
在Visual Studio解决方案资源管理器中-单击Web应用程序项目->在底部选择“属性”选项卡。确保具有以下设置:
匿名身份验证|禁用
Windows身份验证|已启用
我已经在您的代码中看到您已设置
“ iisSettings”:{ “ windowsAuthentication”:是的, “ anonymousAuthentication”:false,
但是,下面的验证步骤将检查是否已根据已配置的iisSettings设置了匿名身份验证和Windows身份验证-如果没有,那就是问题所在
验证步骤: