jwt 如何做在线踢人功能?
source link: https://www.v2ex.com/t/980925
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
bootvue 3 小时 52 分钟前 必须依赖中心化的存储机制
|
Pythoner666666 3 小时 48 分钟前 不配合第三方中间件做不到
|
eastjoehan 3 小时 47 分钟前 token 存在哪,那就在哪把 token 删掉
|
codehz 3 小时 47 分钟前 还是需要一个地方存 revocation list ()
相比于其他不透明 session 来说,revocation list 可以在后端用 bloom filter 做初筛(因为数量上 revoke 的肯定比较少,分发 bloom filter 的状态更便宜) |
wu00 3 小时 45 分钟前 玩骚的是吧,一次性 token ,从签发处来控制
|
BBCCBB 3 小时 42 分钟前 redis 记录这个 token 是否还能用. 白名单/黑名单都可以.
|
nikenidage1 3 小时 42 分钟前 这就是 jwt 的缺点之一啊
|
thinkershare 3 小时 41 分钟前 2 Jwt 主要用来给资源授权的,生命周期很短。几乎不做权限回收控制。如果想要做有状态的会话凭证,又不想维护服务器状态,理论上就是矛盾的。
|
luckyrayyy 3 小时 40 分钟前 无状态怎么记录状态?开着车怎么走路?
|
cp19890714 3 小时 31 分钟前 办法:可以把 JWT 标签存储到服务端,用户访问时,校验当前状态是否有效,如果无效,就禁止访问。
另外,需要踢人,就不应该用 JWT 。JWT 滥用,V 站都说了很多次了。 |
sblid 3 小时 31 分钟前 3 既然需要状态就不要用 jwt ,否则自己重新实现了一个 session ,不是没事找事么。
|
nothingistrue 3 小时 29 分钟前 做不了。JWT 只是个 Token ,不要只用它来做会话跟踪。在线踢人属于会话跟踪,必须上服务器端会话管理。
|
xiaogezz 3 小时 22 分钟前 JWT 只做好认证的事情就好了,至于具体的访问权限,应该交由权限控制
|
ns09005264 3 小时 19 分钟前 我有个想法,那就是做和 session 相反的事,即:把要踢的用户保存在内存里。
具体是这样的: 用户改了密码或者要踢某个用户下线,就把该用户的 ID 保存到内存里,因为要踢下线的人一般都是少数,费不了多少空间。 当然要设置保存期限,和 JWT 的过期时间一样就行。 比如用户改了密码,就把他的 ID 保存到内存里,当他依然用旧令牌访问时,后端从旧令牌中解析到他的 ID 并与内存中的列表比对,如果存在就令牌失效,需要登录,同时删除列表里的 ID 。 如果他改了密码,但再也没有登录过刷新令牌,那么也无妨,因为内存中的列表过期也会清理的。 简单来讲,因为 JWT 对后端服务是无状态的,但可以在后端增加“踢人列表”这一点点不怎么占用资源的状态。 以上没有考虑分布式的情况,因为我没有分布式的经验。分布式的“登录与验证服务”应该也是单机的服务吧? |
Breacher 3 小时 14 分钟前 via iPhone 一直都是只把 JWT 当作 token 用,然后使用数据库跟踪它的状态:已退出、已 revoke 、重置密码后让旧 token 失效。我只是需要 JWT 的一些特性,比如能够携带一些键值对、能够验证签名(签名验证不通过直接返回未登录,避免将压力给到存储层)。
|
streamrx 3 小时 12 分钟前 via iPhone jwt 就是无状态
|
NX2023 3 小时 11 分钟前 JWT 是没法撤销的,如果不依赖缓存,只能使用长短 JWT
在线踢人是不行的,只能说把短 JWT 设置的短一些,比如 1min 或者 30s https://nickxu.me/post/jwt-refresh-token |
fordoo 3 小时 9 分钟前 提供一个思路,jwt payload 中保存一个用户的关键信息的签名,每次验证 jwt 的时候,同时去验证 db 里面用户的这个签名(可以加缓存减少 db 压力),需要踢 jwt 时,只需要让用户的关键信息变化就行
|
hyperbin 2 小时 58 分钟前 via Android 在用户表维护个 tokenStartTime ,鉴权时判断 jwt 的 iat 是否大于 tokenStartTime ,只要更新 tokenStartTime 到当前时间就可以拉黑以前签发的所有 token
|
XCFOX 2 小时 51 分钟前 |
chendy 2 小时 32 分钟前 直接不用 jwt ,jwt 本身就适合在服务间传递,减少用户中心这类服务的压力
浏览器,客户端认证用普通的 token ( cookie 里的 sessionid 也算 token ) |
PVXLL 2 小时 32 分钟前 via iPhone 1 打电话给客户端使用者让他自己销毁
|
zsdroid 2 小时 31 分钟前 @ns09005264 负载均衡了解下
|
aladdinding 1 小时 58 分钟前 加一个黑名单的中间价
|
hongfs 1 小时 39 分钟前 十月份才过去几天,第几个 JWT 帖子了。。。
|
manasheep 1 小时 36 分钟前 token 时限设短,只有高危操作去验证用户账户状态,别的默认提供服务就可以了
|
hez2010 1 小时 35 分钟前 其实最好的方法是不用 jwt
|
lidashuang 1 小时 34 分钟前 黑名单, 数据库存储黑名单
|
fire2y 1 小时 33 分钟前 换个思路 把权限给禁掉就好了
|
cslive 49 分钟前 数据库总用的吧,数据库中拉黑
|
leegoo 41 分钟前 因为 jwt 就是一个 token ,token 反解析出来可以获取到用户信息
数据结构类似于 : key:token ,value:info 我提供的思路是 在获取到 token 后,再使用另外一个 map 存储,这个 map 的 key 是 用户账号(保证用户的唯一性即可),value 对应这个 token 这样就能够保证 ,知道哪些用户登录了,如果要踢人, 只需要根据 新定义的那个 map 找到 对应的 token (可能有多个), 从 map 或者 redis 清理掉即可 |
chenduke 31 分钟前 1.缩小 token 的过期时间,10 分钟,5 分钟。3 分钟, 看具体的场景的需要。
2.token 中包含生成的时间, 刷新 token 的时候与数据库中的最新刷新时间做比较,如果小于则返回需要重新登录。 3. 上面二条并不能保证及时性, 有条件加个消息推送的机制,这样就很及时了。 |
fengpan567 18 分钟前 把用户禁了
|
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK