单点登录设计与实践

任何企业,通过多年的累计,总会诞生出各种框架与服务。于是解决各个不同服务的通信以及统一登录便成了刚需。

现状:公司当前系统已经泛滥,最原始的系统已经用了十年,开发公司也已经倒闭,数据库还好,只有mysql和oracle,前端与后台覆盖了n种语言。。

需求:开发单点登录,可以让前端在各个服务下无感的获取数据。并开发app,将所有系统中可以在手机中操作的功能集成(如:审批,定位,考勤等)。

调研与提问:

  •    1.经过抓包分析得出结论,原有系统都通过 http 协议传输。
       2.用户共同点?单点登录到所有系统,对每个用户必须有通用的识别关系。经过查证工号 唯一 且永不变更。
       3.权限问题?每个系统都有自己的权限管理所以不能更改,单点登录系统 单独做自己的权限,只做各个系统入口的权限,内部权限由原系统判断。

解决方案:

  • 1.制作单点登录系统,并将企业员工与工号信息做账户表。
  • 2.制作 人员系统微服务 实时同步 人事系统人员以及状态 到各个系统中去。
    2.当用户登录单点登录系统,将获取唯一token。
    3.在单点登录系统中加入 系统绑定模块。为各个系统添加相应路由。比如,a系统 前端访问路由为
    127.0.0.1/a/list
    b系统 前端访问路由为
    127.0.0.1/b/list
    4.制作代理服务器,将携带/a/的请求,转发到a系统,如果转发时在redis中,没有找到a系统的cookie/session或者已经过期时。将请求a系统的登录并返回cookie/session,并根据前端携带的token 作为KEY存入到redis中。这里后台需要编写用工号无密码的登录接口,每个系统都得写,并且工号需要做加密处理。


定制规范(前端):

  • 1. 新开发 对内系统,统一采用 单点登录账户系统。
  • 2. 新购买的 对内系统,必须源码可更改再购买。
  • 3. 综合APP内,在各个系统入口处,做权限获取,每当退出子系统入口,将删除该系统权限(因为权限是可变的,不可缓存到本地)。
  • 4. 当token 过期时,与后台约定res.code==7000 ,历时退出登录并删除缓存,并请求后台的退出登录接口,防止后期推送错乱问题。
  • 5. 凡是APP内的长列表,需要采用官方推荐的长列表API,或者自己写虚拟列表,切记不可为了图方便而自己随便写个分页完事。(uniapp系统最多打开的页面是10页,如果10页都有长达千页分页的长列表,系统会有明显的卡顿与延迟)。
  • 6. 凡是有机会用到2次以上的,都封装成组件与方法。
  • 7. 所有能抽象出 配置项的 ,配置项统一写在 config.js 中。




首页
案例

评论

热门文章

暂无