一键登录功能实现

 先说一下需求:

  如下图,当用户登录我们系统之后,如果用户在请假系统中也有对应的账号,那么用户点击请假系统图标,则打开一个新的页签,直接登录到请假系统的首页;如果没有账号则在新页签中展示请假系统的登录页面。

 

 以下是具体实现方案的UML序列图:

 

说明:

  1、用户在首页点击请假系统后,通过js脚本,触发window.open()方法,打开一个新的页签,此方法url为本系统的getAskForLeaveSSOUrl()方法;

  2、getAskForLeaveSSOUrl()方法会组织client_id,同时使用client_secret对当前用户在请假系统中的username进行AES加密,然后根据请假系统给出的接口 进行调用,传输两个参数;

  (如何获取用户在请假系统中的username呢?需要提前两个项目进行数据交互,然后在我们本地进行建立映射表,但新用户来了就需要手动在数据库添加映射关系,比较麻烦;

   另外一种方式是使用统一的用户名,比如所有员工的用户名就是公司邮箱@的前缀,这样就能保证用户在所有系统的用户名都是一样的,我们就是这样做的)。

  3、请假系统根据参数client_id取出client_secret然后解密,获取username,同时生成随机数code,并进行code值与username的绑定,然后存到redis缓存中,设置expire为10秒。请假系统拼接登录url,添加code值,再使用

  client_secret对整个url加密,返回此字符串;

  4、本系统解密此字符串,获取登录的url,然后return "redirect:"+url。即:重定向用户浏览器到请假系统里去。

    eg:  Http://www.xxx.com.cn/CGGL/login/testsso.rf?code=E25AekQ2539bP90

  5、请假系统取出参数code,校验是否过期以及是否没有使用过,然后获取绑定的username,进行模拟登录。

 

 这种方式要有一个前提,就是要让请假系统对我们本系统是信任的,信任依据就是client_id和client_secret,允许我们系统通过username就可以登录请假系统。

 

转载于:https://www.cnblogs.com/yjk295722366/p/9220567.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值