关于前端SSO的一些实践经验

背景:

最近公司做了一套前台门户,我作为前端开发参与其中,将过程中的一些经验记录下来,供自己以后参考。

现在有a,b,c,d 4个系统,每个系统有单独的登录接口,获取token的方式,以及各自的业务逻辑。

现在需要新开发一套portal系统,使得a,b,c,d都使用iframe嵌入到portal中,并且可以实现自动登录。

实现原理:

通过设置相同domain的cookie,来实现前端自动登录。

实现方式:

1、先登录portal系统,获取到portal的cookie,portal将cookie种到前端,cookie-name: PORTALCOOKIE,设置http-only

2、前端打开a系统,由于是相同的domain,可以直接使用portal的cookie,正常调用接口,原系统接口,有可能是在header中设置Authorization,也有可能是使用系统自己的cookie进行登录验证,因此调用a系统接口时,a系统发现没有Authorization参数,原逻辑是跳转登录页,新逻辑是:获取PORTALCOOKIE,如果PORTALCOOKIE也没有,再跳转登录页,如果有PORTALCOOKIE,则通过PORTALCOOKIE调用portal系统的接口,换取登录用户的信息,如userId等。a获取到userId,在本系统进行登录,生成自己的token,通过设置 Access-Control-Allow-Headers: token,使前端能获取到token参数,a系统前端将token按照正常登录获取的token存起来,sso登录完成,之后a系统的其他操作和原来逻辑一样不需要修改。

3、b,c,d系统逻辑类似。

4、如果不是相同的domain,以上方案不适用,就需要使用通用的auth2方案,比如微信登录,简单描述一下:

a系统需要新增一个auth2登录的页面,portal系统打开a系统auth2登录地址的时候,生产一个随机的code放到url的参数上,包含用户信息等,a系统获取code后,使用code调用a系统的后端接口,a系统后端拿到code之后,加上appid,screct等参数,调用portal接口,获取个人信息,获取之后进行正常登录,返回token给前端,前端其他的逻辑照旧。

最后上一张大佬的图片,画的比较清晰

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值