netnr 2019-12-06 13:29:12 👁1.7K 💬3

引言

主站点已经有一套用户登录体系,也集成了第三方登录绑定,那么现在有一套新的站点要上,而且是不同的域名,而这套新的站点全部由主站点提供接口的形式访问,登录统一入口从主站点进

思路

现主站点是 Cookie 存储登录用户信息,如果新上的站点在发起请求时带上主站点存储的 Cookie 授权信息,那是不是就行了呢,答案:是的

请求

fetch("url", {
    credentials: 'include'
}).then(x => x.json()).then(res => {
    console.log(res)
}).catch(err => {
    console.log(err)
})

前端

这是 fetch 发起请求,默认不带上 Cookie ,设置了 credentials: 'include' , 表示请求带上 Cookie

后端

头部设置允许跨域和接收Cookie,Access-Control-Allow-Credentials = true 时,跨域源不允许为*

如果要实现*的效果,可以获取 Request.Headers["Origin"] 再设置,谁请求允许谁

"Access-Control-Allow-Credentials": "true"
"Access-Control-Allow-Origin""http://114.taobao.com:58"
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"

还有

写入授权 Cookie 需设置 SameSiteNone

Cookie 的 SameSite 属性用来限制第三方 Cookie,减少安全风险,可以设置三个值:

  • Strict
  • Lax
  • None
// .net 设置
Cookie.SameSite = SameSiteMode.None;

如果不设置,那么发起请求 Cookie 也不会带上,设置该属性会有伪造 Cookie 的请求,即 CSRF 攻击的风险

SameSite 了解更多信息

注意

跨域请求带上 Cookie ,是指 在 b.com 站点向 a.com 站点发起请求,带上 a.com 站点的 Cookie ,而不是带上 b.com 站点自身的 Cookie

第 1 页3 个回复
头像
2019-12-26 17:13:25 #1
Block

头像
2019-12-26 17:15:13 #2
Block

头像
2020-04-14 16:01:42 #3
Block


链接