支持多域名的多业务系统统一用户中心实现

当你的公司有很多业务线同时在运营,每条业务线有自己的域名和用户中心,这个时候就有一个显而易见的弊端出现了:一是数据大量冗余,本是同一个用户,却在多个产品系统中创建和存储,不利于统一管理;另一方面,用户也需要注册多个账号,不利于从一个产品引导到使用其他产品。基于以上问题,就需要一个统一管理的用户中心。

统一用户中心,首先支持各业务系统有不同的域名,其次需要提供统一的登陆逻辑(业务系统不需要实现登陆逻辑)以及支持各业务系统自行提供登陆逻辑(为了保持业务系统风格统一)。所以,需要分统一登陆逻辑和业务系统自带登陆逻辑两种情况分别讨论。

统一登陆逻辑

先看图
在这里插入图片描述
上图清楚的描绘了用户登陆验证的过程:
1、从浏览器任意发起一个向业务系统的访问请求。
2、业务系统检测session中是否保存有token。
3、如果session中有token,则到用户中心去验证token。
4、如果用户中心验证token有效,则保存token到session中,然后访问正常的业务逻辑,返回业务逻辑页面。
5、如果用户中心验证token无效,则返回浏览器一个跳转到用户中心登陆逻辑的指令并带上用户访问的业务URL。
6、执行用户中心的登陆逻辑。
7、登陆成功后创建token,并跳转到用户中心保存到session的业务逻辑URL。
8、步骤2如果session中无token,则返回浏览器一个jsonp,通过jsonp到用户中心去获取token。
9、获取token后,带token访问业务系统,然后执行步骤3验证token。

业务系统自带登陆逻辑

还是看图说话
在这里插入图片描述

  1. 从浏览器任意发起一个向业务系统的访问请求。
  2. 业务系统检测session中是否保存有token。
  3. 如果session中有token,则到用户中心去验证token。
  4. 如果用户中心验证token有效,则保存token到session中,然后访问正常的业务逻辑,返回业务逻辑页面。
  5. 如果用户中心验证token无效,则将URL先暂存在session中,然后跳转到业务系统自带的登陆逻辑,返回浏览器登陆界面。
  6. 执行登陆逻辑。
  7. 登陆成功后,则访问用户中心去创建token,并拿回一个token。
  8. 从session中取出URL,然后返回浏览器一个带token和url的jsonp,通过jsonp到用户中心去注册这个token。
  9. 到注册中心注册完token后,跳转访问URL,也就是最开始发起的业务系统的访问请求。
  10. 步骤2如果session中无token,则返回浏览器一个jsonp,通过jsonp到用户中心去获取token。
  11. 获取token后,带token访问业务系统,然后执行步骤3验证token。

具体实现

至于具体的实现的话,主要有以下几个方面

  1. token的管理
  2. 用户中心实现登陆和退出逻辑
  3. 提供给业务系统的3个api:验证token、创建token、销毁token
  4. jonsp访问接口:注册token、获取token

最后,附上详细代码,有需要的可以参详:
https://gitee.com/luoye_lj/userCenter

猜你喜欢

转载自blog.csdn.net/m0_46455711/article/details/111466183