用户中心设计-记一次需求

需求分析

  1. 实现多系统之间普通用户账号同步
  2. 子系统可将功能模块化,移植不同的App中可以调用相同的服务
  3. 系统之间切换

痛点

  1. 不同系统与其下属的app或者web之间的判断登录状态方式不同(例,api_token生成方式不同)
  2. 调取服务时,需要知道请求方的用户信息

解决方案

  1. 针对判断登录状态方式不同,用户中心不参与子系统与app/web之间的登录状态判断。
  2. 针对系统之间对账号同步的需求。统一判断登录/注册入口,向子系统中分发账号信息。
  3. 针对调取服务需知道请求方信息。请求之前统一向用户中心请求临时令牌,调取服务带上令牌,服务通过令牌向用户中心请求用户数据。

架构设计图

design

参数说明

  1. login 登录
  2. register 注册
  3. api_tokenA/api_tokenB 不同子系统之间的判断登录状态方式
  4. u_token 登录之后 用户中心分发的令牌,分发令牌时可以带上用户等其他信息
  5. tmp_token 用户中心分发的临时令牌,由子系统向用户中心使用u_token申请
  6. result 返回结果

流程说明

包括登录、注册、请求服务流程


登录

    1. 登录
    • 1.1 App_A 发起登录请求
    • 1.2 子系统A用户中心 发起登录请求
    • 1.3 用户中心 对登录进行判断,返回用户信息和对应 u_token
    • 1.4 子系统A 保存 u_token,该用户登录,生成api_tokenA返回App_A

子系统调用服务

    1. 子系统调用服务
    • 2.1 WEB-B发起调用请求,判断是否存在tmp_token。若不存在向子系统B请求tmp_token
    • 2.2 子系统B 通过 api_tokenB 查询到对应用户的u_token,并且向用户中心请求tmp_token
    • 2.3 用户中心解析u_token,返回对应的tmp_token,并对其设置过期时间
    • 2.4 系统Btmp_token 返回给WEB-B
    • 2.5 WEB-B 携带 tmp_token 请求 ServiceA
    • 2.6 ServiceA 使用 tmp_token 请求 用户中心,判断其合法性
    • 2.7 用户中心 解析 tmp_token 返回对应的 u_token 与用户信息
    • 2.8 ServiceA 获得用户信息,处理请求,返回结果给 WEB-B

注册

隐藏了APP/WEB子系统C的请求,与登录相似

    1. register
    • 3.1 向 用户中心 发起注册请求
    • 3.2 用户中心 新建用户返回对应 u_token 与用户数据

每个子系统都应该保存一份用户数据,为了避免不同系统之间的数据混乱,在用户中心中生成唯一uuid子系统用户中心 之间对账号的对应使用uuid