angular - 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;
}
解决方案
您忘记启用 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
推荐阅读
- python - 如何检查列表中是否有整数
- python - 有没有办法从已经解决的表达式中返回变量?
- openstack - openstack 发出一个没有过期时间的令牌
- sql - 在 PostgreSQL 中将时间转换为十进制数据类型
- proxy - Windows Server Core 2022 - 使用用户/密码添加代理
- nginx - 使用 nginx 正则表达式的位置
- javascript - doPost 函数执行两次(谷歌应用脚本)
- html - 当 sidbar 展开时使背景透明且不活动
- javascript - 如何在 Vue.js 中使用 Day.js 格式化日期
- python - 如何使用kotak证券交易api登录?