现有三个不同的系统,如何整合成单点登录 sso?

现在有三个不同的系统:系统A系统B系统C,想实现登录任意一个系统,都可以无障碍的登录另外两个系统。

各系统原先都有自己的用户表,如果使用SSO单点登录,怎么和三个系统的用户表整合到一起尼?

假设系统A有100个用户,系统B有500个用户,系统C有50个用户。

sso 新建用户表,那用户 ID 得从1开始了

系统A登录sso ,登录然后返回id=1。回到系统A,去查询用户id=1的数据,不会乱吗?

所以得在系统A的用户表中去加字段,记录sso用户ID吗?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 22
Summer

不知道你们公司的业务逻辑是什么,如果可以的话,最好的方案是统一用户中心。之前碰过类似的项目,最后都是统一使用这个方案。

也就是说,不过现在是系统 A,B,C 或者以后可能会 E,F,G 都统一使用一个用户中心来管理用户,如注册、登录。

统一了用户中心,其他就好办了:

  1. 合并用户数据,将三个系统中的用户合并起来;
  2. 更改三个系统的登录和注册入口,都链接到新的「统一的用户中心」。

否则后面随着系统的增多,同步各个系统之间用户数据,将难度倍增,复杂度会高到你想辞职。

2个月前 评论

有同样的疑惑。

2个月前 评论
黄威

sso系统要有一个总的用户表,然后各子系统用户表关联sso系统用户表ID

2个月前 评论

@黄威 所以,子系统的用户表还得插入用户数据,并添加一个字段去记录 sso的用户ID,是这个意思吗?

2个月前 评论
Shuyi

国外,一般SSO都是买Auth0或者Okta的服务来整合的,不知道国内有没有类似的服务。不然自己写SSO会写到头发掉光的……

2个月前 评论
largezhou

整合表的时候,,,应该搞一个 uuid 来区分用户了,不能用自增 ID 了吧,,

2个月前 评论

@largezhou 原先系统A的用户表去加字段,记录 uuid 吗?

2个月前 评论
Summer

不知道你们公司的业务逻辑是什么,如果可以的话,最好的方案是统一用户中心。之前碰过类似的项目,最后都是统一使用这个方案。

也就是说,不过现在是系统 A,B,C 或者以后可能会 E,F,G 都统一使用一个用户中心来管理用户,如注册、登录。

统一了用户中心,其他就好办了:

  1. 合并用户数据,将三个系统中的用户合并起来;
  2. 更改三个系统的登录和注册入口,都链接到新的「统一的用户中心」。

否则后面随着系统的增多,同步各个系统之间用户数据,将难度倍增,复杂度会高到你想辞职。

2个月前 评论

@Summer 那原先的系统 A,B,C 中,有关联用户id 的表都得手动去修改咯

2个月前 评论
Toiu

我们使用的简单的oauth2的机制, 类似微信授权登录的实现, 用户中心只保留基本的用户信息. 每个用户有一个唯一键(姑且也叫openid) , 每个系统的用户表都有一个openid的字段. 用户需要登录就重定向到用户中心的授权登录(或者静默登录)页. 然后带上code到回调地址. 每个系统都有一套自己的appid和secret 通过code 去用户中心code登录接口登录(当然数据包使用了签名机制), 拿到基本信息和openid 剩下的就好办了..

2个月前 评论
Toiu

迁移时你可以使用每个系统自己的appid和user表的id来为每个用户生成这个openid 然后去新系统注册 这样通常来说不会出现重复 当然如果你有类似手机号这样的唯一标识作为每个系统打通的方案更好 但是还是要在注册到用户中心时还是生成一个openid返回给每个系统并保存 不然后续万一修改手机号什么的 就有更多耦合了

2个月前 评论

你这每个用都有自己的数据 而且存的都是user_id 你合并表 但是你原来用户的数据也得修改

2个月前 评论
Toiu

@pi_phq :joy:你细看一下我的表述.

2个月前 评论

上家公司后台系统部比较多,做过Summer说的那种用户中心系统,我们叫做cas。登录都是调用的cas的登录页面和接口啥的。登录成功之后,用户信息存放在redis里面。每次进入新系统都会去redis里面看下是否有该用户的信息。在cas里面,还管理了用户的各个后台系统权限什么的。用户信息什么的,也都是存在cas的数据库里面,没有存在各个后台系统里面。

2个月前 评论
lucifergit

你可以产考一下ucenter, 3个系统每登陆一次就会在ucenter 注册。

2个月前 评论

@zymaozZ 每次进入新系统都会去 redis 里面看下是否有该用户的信息,新系统到了 cas 根据什么信息去判断尼?这个信息从哪里读取尼?

2个月前 评论

id用数据库自增id这就是坑爹的设计。既然这样了,那就在每个系统做一个uid映射吧,新生成的id都用统一的。

2个月前 评论

用JWT做登录就好

2个月前 评论

@英雄没有斗篷 cas里面管理每个后台系统,每个后台系统在cas系统里面有自己的唯一标识的。redis里面存储的key是用户的id,value是用户信息还有各个系统的权限啥的

2个月前 评论

做一个鉴权系统

  • 公司内部所有账号都通过鉴权系统进行分配和删除
  • 公司内部系统的 账号相应的角色权限可以在鉴权系统进行设置
  • 公司内部系统需要登陆的时候 直接跳到鉴权进行登陆,登陆成功返回token和账号相应角色的权限系统
  • 一个子系统登录所有子系统都不需要登陆,redis存入token,token写入cookie,cookie设置domain为父级,比如子域名 a.sss.cn b.sss.cn ,设置为 将domain设置为sss.cn存入token
  • 人员新增离职或者权限变更就全统一在鉴权设置
1个月前 评论
66

JWT配合redis 就可以实现 多平台 一个token的单点登入了啊

1个月前 评论

@Summer 不同系统中的用户组和权限怎么处理?是在子系统中维护用户组和权限。还是子系统的用户组和权限都又ucenter中心来维护呢?

1周前 评论

哈哈最近也在搞单点登录,现在的搞法是中心平台登录后,根据uuid登录子系统账号,这样只改动登录逻辑其它的不用动,但是用户同步还有很多蛋疼的地方,楼主有什么好的办法别忘了回来分享啊

1周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会