
session、JWT、CAS 三种方案 1 zsc8917zsc 2019 年 5 月 27 日 生产环境有域名解析自然不用 host 呀............ 或者用 Oauth2.0 |
2 Canon1014 OP @zsc8917zsc #1 感谢,在看 oauth2 了,总感觉还是少不了存储 token 的问题;因为项目部署都是在内网 没有域名的 |
3 wangxiaoaer 2019 年 5 月 27 日 你这种简单应用 cas 足够了。 另外,OAuth2 跟单点登陆是两个概念,不要搞混了。 |
4 EasyProgramming 2019 年 5 月 27 日 使用 jwt 生成 token,然后把 token 存在 redis 上面,所以模块的登陆逻辑统一为从 redis 来获取 token 然后校验,这样也实现了单点登录 |
5 shakaraka PRO 单点登录不就是存 redis 的时候 ``` // 多点 // token = uid DOASJOJOJODAS = 1 213321J3N312HH1 = 11 ``` // 单点 // uid = token 11 = DOASJOJOJODAS ``` 多点的时候存 token,里面是 uid 单点的时候存 uid,里面是 token |
6 shakaraka PRO ``` // 多点 // token = uid DOASJOJOJODAS = 1 213321J3N312HH1 = 1 ``` ``` // 单点 // uid = token 11 = DOASJOJOJODAS ``` |
7 petelin 2019 年 5 月 27 日 你是想让一个地方登陆, 整个系统都登陆? |
8 zsc8917zsc 2019 年 5 月 27 日 @Canon1014 内网部署的话你可以考虑 token 扔 url 上 |
9 opengps 2019 年 5 月 27 日 via Android 用个数据库存 token,然后所有服务都链接这个数据库验证 |
10 jaylee77 2019 年 5 月 27 日 你这个需求依赖 cookie,不配置域名做不到单点登入 |
12 looplj 2019 年 5 月 27 日 域名都不一样就没办法 |
13 index90 2019 年 5 月 27 日 CAS 方案的为什么会存在 cookie 跨域获取问题?不对,CAS 方案为什么要跨域获取 cookie ? |
14 kekxv 2019 年 5 月 27 日 via Android 有已知远端: 已知远端开放获取 token 的接口,开放跨域 然后你知道怎么做了 无已知远端但局域网:试试 IP ??? |
15 index90 2019 年 5 月 27 日 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 ? |
16 sherryqueen 2019 年 5 月 27 日 重定向到 sso 登录页面 进行登录. 在后端进行登录校验. 登录了就前往目标页面并种 cookie 否则跳转登录页 |
17 Canon1014 OP @zsc8917zsc #8 感谢,测试过是没问题的,算是一个保底的方案了 |
18 Canon1014 OP |
20 ZaytonHoneycutt 2019 年 5 月 27 日 via iPhone @Canon1014 需要一个 hash 保存用户 id 到当前 session key 的映射 |
21 shakaraka PRO @Canon1014 那我反过来问,当前用户是怎么判断的,通过什么来判断执行这个操作的是“用户”,那肯定是请求者的 header 里带 auth 字段嘛,值就是 token 咯,后台接收到了,再去 redis 取 redis.get('token:MKSMKASMKAM'),返回用户 uid,这不就好咯。。如果返回 null 那就是非法 token,返回 403 就 ok 咯 |
22 zwh2698 2019 年 5 月 28 日 via Android 其实我没明白为啥是前端直接请求,不是后端做的吗?前端页面就只要问自己所在的后端就可以了 |
23 Canon1014 OP |
24 EricInBj 2019 年 5 月 28 日 你真的看过了 CAS 吗? 这个跟 IP 还是域名访问没关系。。。 |
25 luw2007 2019 年 5 月 28 日 @EasyProgramming JWT 如果只用来验证登录,是不需要存储的。都是通过相同的密钥加密生成的。 |
26 luw2007 2019 年 5 月 28 日 可以看看 https://jwt.io/ 。两个系统同时使用相同的密钥可能存在风险。 不过都是 web 应用,可以随时切换到新的密钥上。 |
29 ivydom 2019 年 10 月 10 日 用 authing 可以快速实现单点登录,快速体验地址:sample*authing*cn,把 * 换成 . 即可 |
30 Shikyou 2020 年 6 月 24 日 这一类实现单点登录的用户管理的云服务已经很多了,为什么还要自行开发呢? 比如楼上说的国内的 Authing,还有美国的 Auth0 和 AWS Cognito 都行的(国内由于政策原因用不了)。 用了以后就回不去了,再也无需开发、运维用户系统 |