首页 > 解决方案 > Angular 7 .net 核心 2.2 WebApi Windows 身份验证 CORS

问题描述

我正在使用带有 .net core 2.2 和 Asp.net WebApi 的 Angular 7,并尝试使用 Windows 身份验证来识别用户。当我发布数据时,CORS 飞行前请求被阻止,除非我启用匿名身份验证。当我启用“匿名身份验证”时,

HttpContext.User.Identity.Name

即使仍然启用了“Windows 身份验证”,仍为 null

我已经尝试过在本地开发机器上使用 IIS Express、IIS 7.5 和在 Windows 2012 上使用 IIS 8

在 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 中,当启用“Windows 身份验证”时 adLoginName 是正确的,但是当在 IIS 中也选择了匿名身份验证时,adLoginName 为空

ClaimsLoader.cs

public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
      var adLoginName = (ClaimsIdentity)principal.Identity.Name;
}

安全控制器.cs

[HttpGet("HasPermission/{permissionName}")]        
public ActionResult<bool> HasPermission(string permissionName)
{
     var adLoginName = _httpContextAccessor.HttpContext.User.Identity.Name;
}

标签: angular.net-corecorsasp.net-web-api2windows-authentication

解决方案


您忘记启用 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


推荐阅读