关于系统单点登录跪求一个方案

2019-05-27 15:38:13 +08:00
 Canon1014
5789 次点击
所在节点    PHP
30 条回复
zsc8917zsc
2019-05-27 15:46:15 +08:00
生产环境有域名解析自然不用 host 呀............
或者用 Oauth2.0
Canon1014
2019-05-27 15:48:54 +08:00
@zsc8917zsc #1 感谢,在看 oauth2 了,总感觉还是少不了存储 token 的问题;因为项目部署都是在内网 没有域名的
wangxiaoaer
2019-05-27 15:51:43 +08:00
你这种简单应用 cas 足够了。 另外,OAuth2 跟单点登陆是两个概念,不要搞混了。
EasyProgramming
2019-05-27 18:22:17 +08:00
使用 jwt 生成 token,然后把 token 存在 redis 上面,所以模块的登陆逻辑统一为从 redis 来获取 token 然后校验,这样也实现了单点登录
wunonglin
2019-05-27 18:26:53 +08:00
单点登录不就是存 redis 的时候

```
// 多点
// token = uid

DOASJOJOJODAS = 1
213321J3N312HH1 = 11
```
// 单点
// uid = token

11 = DOASJOJOJODAS
```

多点的时候存 token,里面是 uid
单点的时候存 uid,里面是 token
wunonglin
2019-05-27 18:27:40 +08:00
```
// 多点
// token = uid

DOASJOJOJODAS = 1
213321J3N312HH1 = 1
```
```
// 单点
// uid = token

11 = DOASJOJOJODAS
```
petelin
2019-05-27 18:45:44 +08:00
你是想让一个地方登陆, 整个系统都登陆?
zsc8917zsc
2019-05-27 18:55:34 +08:00
@Canon1014 内网部署的话你可以考虑 token 扔 url 上
opengps
2019-05-27 18:58:23 +08:00
用个数据库存 token,然后所有服务都链接这个数据库验证
jaylee77
2019-05-27 18:58:40 +08:00
你这个需求依赖 cookie,不配置域名做不到单点登入
wunonglin
2019-05-27 19:04:15 +08:00
@jaylee77 带 heade 就行了要啥 cookie ?
ZSeptember
2019-05-27 19:19:25 +08:00
域名都不一样就没办法
index90
2019-05-27 19:25:40 +08:00
CAS 方案的为什么会存在 cookie 跨域获取问题?不对,CAS 方案为什么要跨域获取 cookie ?
kekxv
2019-05-27 19:27:01 +08:00
有已知远端:
已知远端开放获取 token 的接口,开放跨域
然后你知道怎么做了
无已知远端但局域网:试试 IP ???
index90
2019-05-27 19:31:15 +08:00
1. 访问 A 站点,如果有登录态,正常登陆
2. 如果没有登录态,跳转到 SSO 站点登录页,query 带 A 站点回调地址(这时候是 SSO 的站点了)
3. SSO 站点登录页判断是否有 SSO 站点的登录态,如果有,调用 A 站点回调地址,query 带 token。如果没有就输入用户名密码,登录 SSO 站点成功,调用 A 站点回调地址,query 带 token。
4. A 站点回调地址,获取 query 中的 token,后台访问 SSO 站点的 token 验证接口
5. 验证成功,A 站点后台设置 session,记录 SSO 站点提供的用户信息。

你确定你看懂了 CAS ?
sherryqueen
2019-05-27 19:46:14 +08:00
重定向到 sso 登录页面 进行登录. 在后端进行登录校验. 登录了就前往目标页面并种 cookie 否则跳转登录页
Canon1014
2019-05-27 19:48:46 +08:00
@zsc8917zsc #8 感谢,测试过是没问题的,算是一个保底的方案了
Canon1014
2019-05-27 19:50:30 +08:00
@index90 #15
@sherryqueen #16
@wangxiaoaer #3
感谢三位老哥,我好像对 CAS 有点误解 现在理解多了,准备重新弄下了
Canon1014
2019-05-27 19:53:31 +08:00
@wunonglin #11 可是 redis 存了一堆 token 怎么知道哪一条是当前用户的 XD
ZaytonHoneycutt
2019-05-27 21:11:16 +08:00
@Canon1014 需要一个 hash 保存用户 id 到当前 session key 的映射

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

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

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

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

© 2021 V2EX