假设用户多次从不同设备登录,然后他们决定要退出 设备 ,我们无法删除 JWT 是否已提供给该设备?
这是我实施的内容,我不确定这是其他网站是如何做到的,或者它是否是一种体面的方式。
现在用户已经 JWT ,他们现在可以访问安全的api端点。假设用户想删除此 会话 ,这就是我所做的。
/destroy/{token}
端点这样做意味着每次请求时,我都要反编译jwt,获取redis令牌,看看它是否仍然存在。我想使用redis或内存DB中的任何其他内容都不是很昂贵的待办事项。
这是一种坚实/有效的方法吗?有没有更好/更简单的方法呢?
答案 0 :(得分:2)
在多个应用程序中实现JWT身份验证/授权时,我也有同样的问题,如果不是非常相似的话,也会达到相同的解决方案:
在我的情况下,我会将JWT + UserID + DeviceName存储在数据库中,然后我会有一个HTTP请求
DELETE /logout/DeviceName
标题Authorization: JWTGoesHere
。
这给了我两个好处:
就速度而言,我们开发的应用程序每秒会收到数百个请求。 这些请求中超过90%需要被授权,这意味着检查JWT在语法上是否有效,检查数据库是否存在,最后但并非最不重要的是检查它是否已过期。
所有这些检查(使用Redis作为数据库)只需不到10毫秒。
底线是:对它进行基准测试,如果它不长,则不需要进行任何优化。
希望它有所帮助!