扫码登录

扫码登录的实现思路很多,这里整理笔者用过的解决方法

一、已存在认证服务器,服务在外部进行集成

外部服务根据前端传输的HttpHeaders里的客户端ID(clientId)判断是否是扫码登录。

1、 长链接(WebSocket)实现

  • 扫码登录时(onOpen阶段),前端和服务后端建立长链接会话,通过SessionId标识并在静态的ConcurrentHashMap中保存此会话为会话A(SessionA),同时在Redis中保存此Id并设置过期时间,返回成功信息:
{
  code: 200,
  msg: "成功",
  info: "<认证服务器地址及授权页面>?code=<SessionA的会话ID>
}

,前端接收到成功信息后将info的内容形成二维码;

  • 认证软件扫码后,在授权页面触发认证授权,授权通过后,在授权页面和服务后端建立长链接会话,连接成功后,前端在会话B中发送SessionA的Id和授权成功的token到后端(onMessage阶段),后端拿到token请求认证服务器验证;
  • 验证成功后,服务后端生成服务端token,并且根据SessionIdConcurrentHashMap中取得SessionA,在SessionA中把token传给前端保存(onMessage阶段)

注:后端在WebSocket的onClose阶段去除Redis中的Id定时标注和SessionA。

posted @   庶旁  阅读(137)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示