我在 .net core 3.1 应用程序中使用 Windows 身份验证。我想检索当前用户名,但它始终为空。我还无法将此应用程序部署到 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"
}
}
}
}
启动.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();
}
Controller :
[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();
});
}
这发生在成功登录之后。为什么名称为空,如何解决?
最佳答案
看起来可能与 How does HttpContext.Current.User.Identity.Name know which usernames exist? 重复
在 Visual Studio 解决方案资源管理器中 - 单击 Web 应用程序项目 -> 在底部选择“属性”选项卡。确保您具有以下设置:
匿名身份验证 |已禁用
Windows 身份验证 |已启用
我已经在你的代码中看到了你设置的
“iisSettings”:{ “windowsAuthentication”:真实的, “匿名身份验证”:假,
但是执行以下验证步骤以检查是否已根据您已配置的 iisSettings 设置了匿名身份验证和 Windows 身份验证 - 如果没有,那就是问题所在
验证步骤:
- 选择您的项目。
- 按 F4
- 检查“匿名身份验证”是否已禁用以及“Windows 身份验证”是否已启用
关于asp.net-core - .NET Core 3.1 User.Identity.Name 使用 Windows 身份验证时始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64125305/