有大佬给个思路就成。
目前 cookie 的方法因为是不同域下所以不行
jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面,因为不是前后端分离,所以没法在每次请求的时候加在 header 里面。
1
s0f 2019-12-18 10:29:41 +08:00
token 可以存在 sessionStorage 或者 localStorage
|
2
dapengzhao OP @s0f 不同域名,不同端口,sessionStorage 或者 localStorage 没法共享,就算可以共享,不是前后端分离,请求的时候也带不上。
|
3
donnior 2019-12-18 10:48:02 +08:00
cookie 不用共享阿,各自一套,验证 token 再服务器端做
|
4
lshero 2019-12-18 10:48:24 +08:00
就模仿一下 oauth 呗,都统一跳转到一个域名下检查登录呗,检查通过带参数回调请求登录的业务方网址,业务方网址校验完参数后写 cookie 呗
|
5
vinHty 2019-12-18 10:52:38 +08:00
https://juejin.im/post/5a002b536fb9a045132a1727
看看这个,用一台服务器专门做验证。 |
6
littleylv 2019-12-18 10:55:42 +08:00
老哥你一个单点登录的问题纠结了 5 天,发了 4 个帖了。。。
|
7
lvxudong 2019-12-18 12:20:43 +08:00
OAuth 或者 SAML 都可以啊
|
8
InkAndBanner 2019-12-18 14:49:41 +08:00
@littleylv 你上来就打楼主嘴巴子?
|
9
dapengzhao OP @InkAndBanner 菜鸟不懂就问,大佬受累了
|
10
acthtml 2019-12-18 15:57:35 +08:00
做 OAuth2.0 就行
|
11
fancy111 2019-12-18 16:15:55 +08:00
jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面,因为不是前后端分离,所以没法在每次请求的时候加在 header 里面???
这句话没一个地方说对了,你再把这两点理解清楚一下吧。 |
12
dapengzhao OP @fancy111 也可能是我理解有问题
1 ( jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面)是我要做单点登陆的几个网站不是在同一个域名下面,因此没法共享 cookie,也就是说我把登陆 a 网站拿到的 token 放在 cookie 里面,再去登陆 b 网站的时候依然拿不到 token 还是要登陆。 2 (因为不是前后端分离,所以没法在每次请求的时候加在 header 里面)基于上面的原因,我想把 token 放在请求头里面,每次发请求的时候跟着请求头发过去,但是我们网站不是前后端分离,所以前端的跳转路由基本都是 href='/a/b'类似这种,并不是前后端分离那种请求接口类似这种 url='127.0.0.1:8000/account/'这种的话可以在每次请求的时候添加 token 到 header 里面。如果非要把所有路由改写成 ajax 方式请求成本太大不可能允许这样做。 额。。。。不知道我说清楚了没有 |
13
fancy111 2019-12-18 16:39:35 +08:00 1
JWT 本身就是作为跨域来使用的,你先去学习一下 JWT 原理,你连原理都没懂就分析是在浪费时间。
token 存入 cookie 是后端来交互的,你分别把 token 存在不同的域名 cookie 下就行了,后端获取到 cookie 再到单点登录服务器处理。。。 我字都不想打了,你还是去学习一下吧。 还有后面的知识,我觉得你应该经验不足。 |
14
dxl314 2019-12-18 16:58:53 +08:00
cookie 可以存指定域下啊
|
15
hoythan 2019-12-18 17:04:41 +08:00
a 页面内嵌一个 iframe,
从 a 访问到 b 域名,b 域名下做一个免登页面,地址栏带上 token,以及一些时间戳加密的验证之类的,然后 b 域名保存这个 token 到 cookie 即可实现无感知的免登。 |
16
hoythan 2019-12-18 17:06:39 +08:00
同理,b 页面登录的时候也可以生成一个隐藏的 iframe,访问到 a 页面的免登页面,地址栏传递 token 过去。
|
17
dapengzhao OP @fancy111 谢谢回复
看了很多 4. JWT 的用法 客户端接收服务器返回的 JWT,将其存储在 Cookie 或 localStorage 中。 此后,客户端将在与服务器交互中都会带 JWT。如果将它存储在 Cookie 中,就可以自动发送,但是不会跨域,因此一般是将它放入 HTTP 请求的 Header Authorization 字段中。 基本都是这么说的,我再多看看吧,可能还是没有理解透。 |
18
EricInBj 2019-12-18 17:10:30 +08:00
CAS 了解一下。。。
|
20
walpurgis 2019-12-18 17:28:06 +08:00 via Android
标准答案 OAuth2,所有大厂登录系统都用这个方案,它的 RFC 里就是用普通的前后不分离网站做例子的
|
21
jie170601 2019-12-18 17:28:24 +08:00 via Android
感觉不用共享 cookie,如果 a 是认证中心地址,其他系统每次检测到当前请求未登录,就发重定向给浏览器,浏览器跳转到 a 的地址,会自动带上 a 的 cookie,a 只要判断浏览器传给自己的 cookie 有没有登录过就行了,与其他系统域名的 cookie 无关
|
22
dapengzhao OP @jie170601 '其他系统每次检测到当前请求未登录'这句话就通不过。
|
23
jie170601 2019-12-18 17:50:59 +08:00 via Android
@dapengzhao 子系统也要维护自己的局部会话,登录了就可以不通过单点登录系统,不然每个请求都去单点登录走一遍?
|
24
glaucus 2019-12-18 17:57:13 +08:00 via iPhone
最近才做了这个....俩公司的系统做单点登录,建了个账号同步中间件
|
25
fengbjhqs 2019-12-18 18:41:39 +08:00
@dapengzhao #22 每次打开网站,就判断是否登录,如果没有登录,就跳转到统一的登录地址,这个地址判断以前是否登录,如果登录了就直接跳回来,并附带 jwt,这样就可以了哇,
|
26
bingfengwx 2019-12-18 18:48:07 +08:00 via Android
问过度娘了吗??
|
27
Shikyou 2020-06-24 16:54:31 +08:00
这一类实现单点登录的 user pool 云服务已经很多了,为什么还要自行开发呢?
比如楼上说的国内的 Authing,还有美国的 Auth0 和 AWS Cognito 都行的(国内由于政策原因用不了)。 用了以后就回不去了,再也无需开发、运维用户系统…… |