【发布时间】:2020-09-29 18:12:44
【问题描述】:
我正在使用带有 .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"
}
}
}
}
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 为空,如何解决?
【问题讨论】:
-
您能否给我们看看您的
program.cs文件,因为我没有重现您的问题。 -
我在上面的帖子中添加了 Program.cs
-
我用了和你一样的代码,但是测试可以得到名字,所以建议你新建一个项目重新测试一下。
-
你是对的。这是因为我需要使用自定义 ClaimsTransformer 来允许基于 Active Directory 组的访问。用户名未复制到新的 ClaimsPrincipal 返回身份。
标签: asp.net-core