如何跨域名共享Cookie?

2020-02-07  本文已影响0人  fisher爱吃鱼

假设有一个博客服务,域名为 blog.abc.com,另有一个鉴权服务,域名为 login.abc.com,如何共享这两个域名的 Cookie,实现登陆功能呢?

总体来说,需要做如下两步操作:

  1. 服务端如何允许接收跨域名的请求(CORS),此处的服务端指鉴权服务端
  2. 客户端跨域名发送 Ajax 请求如何同时发送认证信息(比如 Cookie 信息),此处的客户端指浏览器端,既包括 blog.abc.com,也包括 login.abc.com

服务端如何允许接收跨域名的请求

  1. 打开 Startup.cs 文件,在 ConfigureServices 方法中添加如下代码:
    services.AddCors(options => options.AddPolicy("AllowCors", builder => builder.WithOrigins(new []{"blog.abc.com"}).AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials()));
  2. 在需要共享 CookieController 中:

客户端跨域名发送 Ajax 请求如何同时发送认证信息

这个比较简单,主要是在退出登陆时需要将认证信息(Cookie)一并发送给鉴权服务,只需在 Ajax 请求中增加设置 xhrFields 即可:

$.ajax({
    type: 'DELETE',
    url: 'login.abc.com',
    xhrFields: { withCredentials: true }, // 发送凭据
    dataType: "json",
    success: function (response) {
    },
    error: function (error) {
    }
});
上一篇 下一篇

猜你喜欢

热点阅读