鹅滴神啊,上帝以及老天爷啊,不同域名下,前后端不分离的单点登录该怎么搞啊,我太难了。

2019-12-18 10:27:17 +08:00
 dapengzhao
有大佬给个思路就成。
目前 cookie 的方法因为是不同域下所以不行
jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面,因为不是前后端分离,所以没法在每次请求的时候加在 header 里面。
3628 次点击
所在节点    问与答
27 条回复
s0f
2019-12-18 10:29:41 +08:00
token 可以存在 sessionStorage 或者 localStorage
dapengzhao
2019-12-18 10:44:02 +08:00
@s0f 不同域名,不同端口,sessionStorage 或者 localStorage 没法共享,就算可以共享,不是前后端分离,请求的时候也带不上。
donnior
2019-12-18 10:48:02 +08:00
cookie 不用共享阿,各自一套,验证 token 再服务器端做
lshero
2019-12-18 10:48:24 +08:00
就模仿一下 oauth 呗,都统一跳转到一个域名下检查登录呗,检查通过带参数回调请求登录的业务方网址,业务方网址校验完参数后写 cookie 呗
vinHty
2019-12-18 10:52:38 +08:00
https://juejin.im/post/5a002b536fb9a045132a1727
看看这个,用一台服务器专门做验证。
littleylv
2019-12-18 10:55:42 +08:00
老哥你一个单点登录的问题纠结了 5 天,发了 4 个帖了。。。
lvxudong
2019-12-18 12:20:43 +08:00
OAuth 或者 SAML 都可以啊
InkAndBanner
2019-12-18 14:49:41 +08:00
@littleylv 你上来就打楼主嘴巴子?
dapengzhao
2019-12-18 15:47:21 +08:00
@InkAndBanner 菜鸟不懂就问,大佬受累了
acthtml
2019-12-18 15:57:35 +08:00
做 OAuth2.0 就行
fancy111
2019-12-18 16:15:55 +08:00
jwt token 的方法因为是不同域所以 token 没法加在 cookie 里面,因为不是前后端分离,所以没法在每次请求的时候加在 header 里面???
这句话没一个地方说对了,你再把这两点理解清楚一下吧。
dapengzhao
2019-12-18 16:24:00 +08:00
@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 方式请求成本太大不可能允许这样做。

额。。。。不知道我说清楚了没有
fancy111
2019-12-18 16:39:35 +08:00
JWT 本身就是作为跨域来使用的,你先去学习一下 JWT 原理,你连原理都没懂就分析是在浪费时间。
token 存入 cookie 是后端来交互的,你分别把 token 存在不同的域名 cookie 下就行了,后端获取到 cookie 再到单点登录服务器处理。。。 我字都不想打了,你还是去学习一下吧。
还有后面的知识,我觉得你应该经验不足。
dxl314
2019-12-18 16:58:53 +08:00
cookie 可以存指定域下啊
hoythan
2019-12-18 17:04:41 +08:00
a 页面内嵌一个 iframe,
从 a 访问到 b 域名,b 域名下做一个免登页面,地址栏带上 token,以及一些时间戳加密的验证之类的,然后 b 域名保存这个 token 到 cookie 即可实现无感知的免登。
hoythan
2019-12-18 17:06:39 +08:00
同理,b 页面登录的时候也可以生成一个隐藏的 iframe,访问到 a 页面的免登页面,地址栏传递 token 过去。
dapengzhao
2019-12-18 17:09:49 +08:00
@fancy111 谢谢回复
看了很多
4. JWT 的用法
客户端接收服务器返回的 JWT,将其存储在 Cookie 或 localStorage 中。

此后,客户端将在与服务器交互中都会带 JWT。如果将它存储在 Cookie 中,就可以自动发送,但是不会跨域,因此一般是将它放入 HTTP 请求的 Header Authorization 字段中。
基本都是这么说的,我再多看看吧,可能还是没有理解透。
EricInBj
2019-12-18 17:10:30 +08:00
CAS 了解一下。。。
tyx1703
2019-12-18 17:19:57 +08:00
@fancy111 分别把 token 存在不同的域名 cookie 下就行了

请问下这个如何实现
walpurgis
2019-12-18 17:28:06 +08:00
标准答案 OAuth2,所有大厂登录系统都用这个方案,它的 RFC 里就是用普通的前后不分离网站做例子的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/630046

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX