跨域cookie

需求场景

最近做通过微信注册我们的平台,我们的平台是微信是微服务,微信扫码在登录auth server服务,
注册在平台mono服务,因此需要将扫码后的微信user info 从auth传到mono。

目前有三个环境:

  1. 本地开发环境,服务A和服务B在同一ip的不同端口,即

    服务A: 192.168.2.165:5010

    服务B: 192.168.2.165:3002

  2. k8s环境,内网,服务A和服务B没有共同的一级域名,是两个不同的ip,即

    服务A: 192.168.2.192

    服务B: 192.168.2.291

  3. test和线上环境,外网,服务A和服务B有共同的一级域名,即

    服务A: b.a.com

    服务B: c.a.com

知识点

res.cookie('key', 'value', {
    maxAge: 600000,
    httpOnly: true,
    path: '/',
    domain: 'a.com',
    secure:true //设置该选项,只有https网站才可以输出该cookie
});
  • key

    cookie的变量名,必选

  • value

    cookie变量的值,必选

  • maxAge

    cookie变量保存的时间,可选。

    可以为负数,表示此cookie只是存储在浏览器内存里,只要关闭浏览器,此cookie就会消失。maxAge默认值为-1。

    可以为正数,表示此cookie从创建到过期所能存在的时间,以秒为单位,此cookie会存储到客户端电脑,以cookie文件形式保存,不论关闭浏览器或关闭电脑,直到时间到才会过期。

    可以为0,表示从客户端电脑或浏览器内存中删除此cookie。

  • httpOnly

    如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,
    窃取cookie内容,这样就增加了cookie的安全性。这时cookie只能在服务器端获取,前端无法获取。

  • path

    cookie的有效范围,是在参数domain基础上的有效范围。如果path设置为”/”,那就是在整个domain都有效,
    如果path设置为”/test”,那么只在domain下的/test目录及子目录才有效。

  • domain

    cookie有效的域名。可选,默认值为当前。domain只能设置为当前域或其父级域名。当domain不正确时,将设置cookie失败。

    当cookie设置为一级域名a.com时,其子域b.a.com,c.a.com均有效。

  • secure

    值cookie是否仅通过安全的https,值为0或1,如果值为1,则cookie只能在https连接上有效,默认值为0,表示cookei在http和https连接上都有效。

(1)有共同一级域名的跨域cookie

对于有共同一级域名,只需在设置cookie时将domain设置成共同的一级域名即可,path设置为根目录/。

(2)不同ip的cookie

对于不同ip的cookie在做时没有实现cookie的共享,曲线救国了一下。

在此之间因需求,服务A跳到服务B的注册路由(/weChatRegister)不允许直接访问,因此对/weChatRegister路由进行了token的加密
和解密(使用的第三方库jsonwebtoken https://github.com/auth0/node-jsonwebtoken),因此可将所需的信息通过token从服务A带到服务B。

猜你喜欢

转载自www.cnblogs.com/simply-yu/p/9313715.html