跨域名获取cookies-SSO

背景

同一个公司多个域名,账号体系相同。要实现一处登录,多个网站可用。比如,登录了淘宝(taobao)后,域名不同的天猫(tmal)、飞猪等页面也都登录了。不同网站之间能拿到通用cookies.

解决方案

1. 本地传递

即通过iframe 等

2.服务器传递

网上一堆什么jsonp的不能用的例子,其实本质就是Access-Control-Allow-Origin 当A域名下,跨域访问另一个域名B的api时 浏览器会传递B域名下的cookies而不是 A域名下的。 通过这个特性 就能通过服务器轻松获得B域名下的cookies。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
app.get('/f/dj',app.getUser, function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', 'https://B-url.com')
// Request methods you wish to allow
res.setHeader(
'Access-Control-Allow-Methods',
'GET, POST, OPTIONS, PUT, PATCH, DELETE'
)
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type')
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true)

res.json({
token: req.cookies.xq_a_token
})
})

在A网站的服务器(node)上设置允许B网站访问。随后就可以在B网站调用这个api实现 获取A网站cookies的目的了。

跨域名获取相同的cookie 。