js - 单点登录

1、引言

最近在改造项目前端登录流程,有些心得,分享一下如何实现单点登录

2、什么是单点登录

单点登录(Single Sign On),也简称sso,意思就是在一个项目手动登录后,在访问同一登录体系的另一个项目时会自动登录。

3、实现

1、思路

1、单点的实现

普通的登录的流程通过账号密码向后端换取token,或者通过账号密码向后端获取code,在用code换取token,不论哪种方式,最终前端都会得到一个token,在将token写入到localStorage或者cookie,在接口请求的时候带上这个token给后端鉴权,实现登录。我们在此基础上增加一个流程,使用一个公共Iframe来存储token,即每次项目登录的时候将token存到公共iframe的localStorage中,使用的时候在从这个iframe中的localStorage中取出token,简单来说就是各个项目共用一个iframe来存取token,使每个项目共用同一个地方的token,达到单点登录。

2、兼容

由于登录组件使用vue2.0开发,但是有的项目已经开始使用vue3.0开发,直接引入组件会报错,以后甚至可能出现其他框架项目,为了兼容这个情况,将整个登录都放到iframe中去维护,包括登录界面、登录接口调用、token存储等核心登录流程,而外部提供一个只含有js的npm包,主要用来创建iframe和iframe通信。不管是vue3.0还是其他js框架都能直接无负担接入登录组件

2、整体流程

4、优缺点

1、优点

  • 实现了单点登录

  • 各框架接入简单,无需关心兼容性问题,且接入方无需考虑接口跨域问题

  • 便于升级,核心流程都在iframe中,流程升级无需更新npm包

2、缺点

  • iframe有白屏问题,建议增加个loading态

5、结语

通过这次登录的实践也踩了不少坑,如登录组件都是以npm包的形式,导致vue3不兼容vue2组件,并花了半个五一假期重构成iframe形式,本文主要提供实现思路,其他细节实现起来其实也不复杂,主要就是登录组件的封装和iframe之间的通信,整个流程搞完后也收获了不少的知识和经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhzzcc_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值