cookie cookie sso sso netnr 发布于:2019年12月06日 更新于:2019年12月06日 370

引言

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

思路

现主站点是 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 个留言
  • 头像
    ewqeqw Guest 2019年12月26日回复 1
    block
  • 头像
    ewqeqw Guest 2019年12月26日回复 2
    block
  • 头像
    a Guest 2020年04月14日回复 3
    block
回复
昵称
邮箱
链接
ˆ