一 JWT实现只许一个帐号登陆一台设备的方案,在另一台设备登陆立即剔出,要重新登陆
二
1 目前通过在Claims中添加最后更新日期方式实现,页面不断轮询该日期是不是缓存中的日期,不是就踢出
2 觉得轮轮询耗费资源,希望优化
3 由于缓存日期在踢出时做了更新,虽然用户引导去了登陆界面,但仍可通过输入地址进行访问,有bug
三.开发环境是c#,NET CORE MVC
JWT只能登陆一台设备,否则剔除
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- m0_62946064 2023-11-01 12:33关注
这是一个关于JWT(JSON Web Token)在多设备登录的问题。在你的场景中,你希望实现一个功能,即一个账号只能在一个设备上登录,如果在其他设备登录,那么之前的设备会被踢出。下面我会给出一些建议和解决方案。
- 使用JWT实现一个帐号只能在一个设备上登录
在JWT中,你可以存储用户的设备信息,例如设备ID或者IP地址。当用户尝试在新的设备上登录时,你可以检查JWT中的设备信息是否与当前设备相符。如果不同,那么可以认定用户在其他设备上登录,然后使旧设备的登录状态失效。
- 优化轮询方式
轮询确实是一种资源消耗的方式,一种更好的方式是使用WebSocket或者Server-Sent Events(SSE)。这两种方式都可以实现服务器向客户端推送信息,当用户在新的设备上登录时,服务器可以通过WebSocket或SSE向旧的设备发送一个消息,使其登录状态失效。
- 解决用户被踢出后仍可以通过输入地址进行访问的问题
在用户被踢出后,除了更新缓存日期,你还需要清除用户的登录状态,例如在服务器端删除用户的JWT。同时,你可以在用户尝试访问受保护的资源时检查其登录状态,如果其登录状态无效(例如JWT不存在或者已过期),那么重定向到登录页面。
在C#, .NET CORE MVC的开发环境中,你可以使用Microsoft.AspNetCore.Authentication和Microsoft.AspNetCore.Authorization这两个库来实现上述功能。具体实现可能会涉及到中间件(Middleware)的使用,以及对于JWT的创建、验证和管理。
请注意,虽然这种方式能够增强安全性,但它也可能对用户体验产生影响,因为用户可能在不知情的情况下被踢出。因此,在实际应用中,你可能需要给用户一些提示,例如当用户在其他设备上登录时,通知他们并选择是否踢出旧设备。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 opencv图像处理,需要四个处理结果图
- ¥15 无线移动边缘计算系统中的系统模型
- ¥15 深度学习中的画图问题
- ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
- ¥15 Python报错怎么解决
- ¥15 simulink如何调用DLL文件
- ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
- ¥30 线性代数的问题,我真的忘了线代的知识了
- ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
- ¥188 需要修改一个工具,懂得汇编的人来。