Я использую Angular 7 с .net core 2.2 и Asp.net WebApi и пытаюсь использовать аутентификацию Windows для идентификации пользователя.Когда я публикую данные, предварительный запрос CORS блокируется, если я не включаю анонимную аутентификацию.Когда я включаю «Анонимную аутентификацию», значение
HttpContext.User.Identity.Name
равно нулю, даже если «Аутентификация Windows» все еще включена
Я пробовал это с помощью IIS Express,IIS 7.5 на локальной машине разработки и IIS 8 на Windows 2012
In Startup.cs
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddCors(o => o.AddPolicy("TreasuryPolicy", builder =>
{
builder
.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
}));
services.AddCors();
services.AddTransient<IClaimsTransformation, ClaimsLoader>();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseAuthentication();
app.UseMvc();
}
В обоих ClaimsLoader.cs и Controller adLoginName правильно, когда включена «Проверка подлинности Windows», но когдаАнонимная аутентификация также выбирается в IIS, тогда adLoginName имеет значение null
ClaimsLoader.cs
public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var adLoginName = (ClaimsIdentity)principal.Identity.Name;
}
SecurityController.cs
[HttpGet("HasPermission/{permissionName}")]
public ActionResult<bool> HasPermission(string permissionName)
{
var adLoginName = _httpContextAccessor.HttpContext.User.Identity.Name;
}