Angular 7 .net core 2.2 WebApi Windows Аутентификация CORS - PullRequest
0 голосов
/ 04 апреля 2019

Я использую 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;
}

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Вы забыли включить cors:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseAuthentication();
    app.UseMvc();
    app.UseCors("TreasuryPolicy")
}

Дополнительная информация здесь: https://docs.microsoft.com/de-de/aspnet/core/security/cors?view=aspnetcore-2.2

0 голосов
/ 09 апреля 2019

Кажется, если вы добавляете атрибут [Authorize] к контроллеру или действие, которое вызывает принудительную аутентификацию Windows, когда выбраны «Enable Anonymous Authentication» и «Enable Windows Authentication» https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.2&tabs=visual-studio

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...