带有Angular前端的.net core 2 Web API Windows身份验证

时间:2018-09-26 08:24:54

标签: angular .net-core asp.net-core-webapi

我正在尝试在具有Angular 6前端的.net核心2.1 Web API中使用Windows身份验证。从本质上讲,我正在尝试将Windows用户名添加到页面上。我的理解是,要实现这一点,我需要调用api(在客户端请求上使用withCredentials),然后在api中填充User.Identity.Name属性-但始终为null。

我不知道我是否缺少某些东西,或者我的理解是完全错误的。.

在launchSettings.json中,我有:

  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": true, 
    "anonymousAuthentication": false, 
    "iisExpress": {
      "applicationUrl": "http://localhost:2821",
      "sslPort": 44341
    }
  }

我的startup.cs看起来像这样:

public void ConfigureServices(IServiceCollection services)
{
   services.Configure<IISOptions>(options => {
      options.AutomaticAuthentication = true;
    });
    services.AddAuthentication(IISDefaults.AuthenticationScheme);
    services.AddMvc.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   if (env.IsDevelopment())
   {
      app.UseDeveloperExceptionPage();
   }
   else
   {
      app.UseHsts();
   }
   app.UseAuthentication();
   app.UseMvc();
}

我的Program.cs如下:

public class Program
{
   public static void Main(string[] args)
   {
      CreateWebHostBuilder(args).Build().Run();
   }

   public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
         .UseIISIntegration()
         .UseStartup<Startup>();
}

在客户端上,我的Angular Service如下:

var headers = new HttpHeaders({ 'Content-Type': 'application/json', 
  'Accept': 'application/json' });

return this.http.get(environment.endpointBaseUrl + '/api/User/GetUserInfo', 
{ headers: headers, withCredentials: true});

如果我用Authorize装饰Controller动作,则会收到此错误: InvalidOperationException:未指定authenticationScheme,并且未找到DefaultChallengeScheme

如果Controller动作未使用Authorize User.Identity.Name修饰,则为空。

我已经为此事碰壁了,所以任何帮助都会很棒。 谢谢。

0 个答案:

没有答案