我正在尝试在具有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修饰,则为空。
我已经为此事碰壁了,所以任何帮助都会很棒。 谢谢。