如何设置启用了CORS的域身份验证Cookie .Net Core?

时间:2019-09-25 22:48:01

标签: c# authentication asp.net-core cookies cors

我正在尝试对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

从Angular到webapi的

http请求是http://localhost:xxx2/api/auth,它具有SignInAsync调用,公司的单一标志使用用户名,但从不创建cookie。如果删除options.Cookie.Domain = "localhost:xxxx";,cookie确实会在webapi域http://localhost:xxx2上创建。我一定在这里想念什么。

1 个答案:

答案 0 :(得分:0)

在阅读了关于stackoverflow的其他文章后,发现AllowAllOrigins仅能解决此问题,但会构成威胁。

所以我最终用JWT解决了这个问题-为从客户端界面发送的每个请求设置授权令牌。造成此问题的原因是客户端和WebApi托管在不同的域中。