wli*_*gke 12 authentication session session-state jwt
我已经阅读了很多关于JWT以及如何通过JWT创建"无状态"会话的内容.我理解的要点是,由于签名和过期,您实际上可以发送整个会话以由客户端保存,并且服务器不必维护数据库来记住会话.
我不明白的是,如果您的用户需要注销,或者您需要在到期前使会话无效,会发生什么?
从技术上讲,您可以指示浏览器从客户端删除它,但您无法确定这实际发生了.令牌本身在技术上仍然有效,如果没有遵循删除说明,它仍然可以使用.
这种理解是否正确?如果是这样,这对客户端会话管理来说不是一个大错吗?除了让服务器存储会话或缩短过期时间之外,还有什么方法可以克服这个问题吗?
ped*_*ofb 15
有几个原因使JWT令牌在其到期时间之前失效:帐户已删除/阻止/暂停,密码已更改,权限已更改,用户已由管理员注销.所以你的问题是主题
根据您的使用情况,有几种技术可以应用或组合
1)从本地存储中删除客户端令牌
2)令牌黑名单:存储在注销和到期时间之间的令牌,标记已过期并在每个请求中检查它.使用唯一标识符jti或包含上次登录日期并发出iat以删除旧令牌
它需要服务器存储.如果您不希望撤销太多令牌,您也可以使用内存中的黑名单.您只需在更新用户和关键数据后设置条目currentTime - maxExpiryTime < lastLoginDate (iat)?.当currentTime - maxExpiryTime > lastModified(不再发送未过期的令牌)时,可以丢弃该条目.在这种情况下,不需要存储整个令牌.只是sub,iat也许吧jti
3)到期时间短并旋转它们.每隔几个请求发出一个新的访问令牌.使用刷新令牌允许您的应用程序获取新的访问令牌,而无需重新进行身份验证和组合sliding-sessions
滑动会话是在一段时间不活动后到期的会话.当用户执行操作时,将发出新的访问令牌.如果用户使用过期的访问令牌,则会话被视为非活动状态,并且需要新的访问令牌.可以使用刷新令牌或需要凭据来获取此新令牌
如果帐户被新用户和密码登录入侵,则允许更改用户唯一ID
要在用户更改密码时使令牌无效,请使用密码哈希对令牌进行签名.如果密码更改,则以前的任何令牌都将自动无法验证.使用其他感兴趣的字段扩展此机制以进行签名.缺点是它需要访问数据库
更改签名算法以撤消主要安全问题中的所有当前令牌
看看Invalidating JSON Web Tokens
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |