我正在尝试对CORS原始请求进行身份验证,并与内部公司单一登录实用程序的用户一起设置Claims原则。到目前为止,我具有当前设置,将永远不会在身份验证设置中设置的域上创建cookie。
我有一个Angular客户端应用程序和.Net Core 3.0 Webapi,要求是客户端能够为将来的api调用设置身份验证。
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.Cookie.Name = "access_token";
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.Domain = "localhost:xxxx";
});
//CORS
services.AddCors(options =>
{
options.AddPolicy(
"AllowOrigin",
builder => builder.WithOrigins("localhost:xxxx")
.AllowCredentials()
.AllowAnyHeader()
.AllowAnyMethod());
});
//Sign In
HttpContext.SignInAsync(
scheme: CookieAuthenticationDefaults.AuthenticationScheme,
principal: new ClaimsPrincipal(new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme)),
properties: new AuthenticationProperties { ExpiresUtc = DateTime.Now.Add(120) });
我正在本地进行所有测试,因此两个URL都是具有不同端口的localhost
托管了Angular:http://localhost:xxxx
WebAPi托管:http://localhost:xxx2
http请求是http://localhost:xxx2/api/auth
,它具有SignInAsync调用,公司的单一标志使用用户名,但从不创建cookie。如果删除options.Cookie.Domain = "localhost:xxxx";
,cookie确实会在webapi域http://localhost:xxx2
上创建。我一定在这里想念什么。
答案 0 :(得分:0)
在阅读了关于stackoverflow的其他文章后,发现AllowAllOrigins仅能解决此问题,但会构成威胁。
所以我最终用JWT解决了这个问题-为从客户端界面发送的每个请求设置授权令牌。造成此问题的原因是客户端和WebApi托管在不同的域中。