在ASP.NET Core API中使用跨域进行Oauth Cookie身份验证

Mad*_*r D 10 authentication api cookies cross-domain .net-core

我在ASP.NET Core API项目中使用了OAuth cookie身份验证。所有API在此项目中均得到授权。成功登录后,可以从浏览器网址栏中访问所有API。当我尝试从其他域访问Ajax请求中的API时,总是返回Unauthorized。

在这里,如何从Ajax请求中识别用户是否已通过身份验证?

API domain = ".apidomain.com"
Client domain = ".clientdomain.com"
Run Code Online (Sandbox Code Playgroud)

API配置:

services.AddAuthentication("oAuthSecurityScheme")
                .AddOAuth("login.microsoftonline.com",
                options =>
                {
                   ....
                   ....
                }).AddCookie(
                "oAuthSecurityScheme",
                options =>
                {
                options.LogoutPath = new PathString("/logout");
                options.LoginPath = new PathString("/api/v1/account/authorize");
                options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
                options.SlidingExpiration = true;
                options.Cookie.Name = "CustomerOAuthCookie";
                options.Events.OnRedirectToLogin = UnAuthorizedResponseAsync;
                options.Cookie.SameSite = SameSiteMode.None;
                options.Cookie.HttpOnly = false;
            });
Run Code Online (Sandbox Code Playgroud)

客户申请:

$.ajax({
       url: "https://localhost:44332/api/gettickets/1",
       type: 'GET',
       success: function (result)
       {
          alert(result);
          console.log(result);
       }
});
Run Code Online (Sandbox Code Playgroud)

注意:当我直接在浏览器中访问以下API时,它将返回正确的响应 https:// localhost:44332 / api / gettickets / 1

小智 0

我通常更喜欢使用令牌来发送和保存授权数据并向您建议。但如果您仍然想使用 cookie,请按照以下链接方式操作:

jquery ajax调用不发送cookie