扫码登录
扫码登录的实现思路很多,这里整理笔者用过的解决方法
一、已存在认证服务器,服务在外部进行集成
外部服务根据前端传输的HttpHeaders里的客户端ID(clientId)判断是否是扫码登录。
- 扫码登录时(onOpen阶段),前端和服务后端建立长链接会话,通过SessionId标识并在静态的
ConcurrentHashMap
中保存此会话为会话A(SessionA),同时在Redis中保存此Id并设置过期时间,返回成功信息:
{
code: 200,
msg: "成功",
info: "<认证服务器地址及授权页面>?code=<SessionA的会话ID>
}
,前端接收到成功信息后将info
的内容形成二维码;
- 认证软件扫码后,在授权页面触发认证授权,授权通过后,在授权页面和服务后端建立长链接会话,连接成功后,前端在会话B中发送SessionA的Id和授权成功的token到后端(onMessage阶段),后端拿到token请求认证服务器验证;
- 验证成功后,服务后端生成服务端token,并且根据SessionId在
ConcurrentHashMap
中取得SessionA,在SessionA中把token传给前端保存(onMessage阶段)。
注:后端在WebSocket的onClose阶段去除Redis中的Id定时标注和SessionA。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端