扫码登录的实现思路很多,这里整理笔者用过的解决方法
一、已存在认证服务器,服务在外部进行集成
外部服务根据前端传输的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阶段)。
标签:扫码,登录,前端,token,SessionA,授权 From: https://www.cnblogs.com/MiddleByPass/p/17069347.html注:后端在WebSocket的onClose阶段去除Redis中的Id定时标注和SessionA。