修复所有JWT的心理模型只是一个符号格式.
它不是认证,不是会话,也不是数据库。
一旦你把这些想法分开 大部分的痛苦就会消失 JWT是被签名的JSON天体.
就是这样。
有效载荷持有诸如(主体)和(延长)等权利主张。
签名证明该标志没有被篡改.
JWT不是会话商店: 你不能在JWT失效前撤销它 需要撤销的,需要块状或短失效.
不是数据库,别把重数据塞进有效载荷里 每一个请求都会收到 不是魔弹:这是在没有共享服务器侧状态的派对之间传递诉求的一种方式. 3个流 重要1。
访问令牌仅是Simplest流量:登录返回一个JWT,客户端在信头中发送,服务器在每个请求中验证.
对小应用程序来说工作是好的,但每个请求都点击了你的认证逻辑和符号不能提前失效.
2.
访问+刷新令牌 SPA 常见模式.
进入信使活了15分钟 刷新信使活了7天 刷新令牌被安全地存储(httpOnly cookie)并仅用于得到一个新的访问令牌.
刷新端点 : 这样可以给您提供短寿命的访问符( 如果泄露时风险会较小) 和长寿命会话而不存储服务器侧状态 。
3.
无国籍与状态 如果您需要立即撤销令牌(如密码更改),您有两种选项: 在您的用户表中保留一个符号版本 。
包括在JWT有效载荷中。
跳出版本以取消所有旧的符号 。
使用块列表( Redis 或 DB) 来表示已撤销的符号 。
在核实前检查封条列表 。
两者都添加了状态.
不需要撤销的,留作无国籍人.
常见的错误,我在本地Storage中看到Storing JWT:XSS可以偷取.
使用 httply Only cookie 来刷新令牌, 并尽可能将访问令牌保存在内存中 。
将敏感数据放入有效载荷中:是基数64被编码而未加密.
谁能读取.
使用相同的秘密进行访问和刷新:使用单独的秘密.
若一出漏相还相安.
不检查 : 大多数的图书馆都自动操作, 但是如果你手卷, 不要忘记。
决定清单在添加JWT之前询问这些: 您是否需要撤销标志 ?
如果有,请规划一个块列表或版本.
你在为多个客户建立API吗?
JWT运作良好。
你的服务器是唯一的消费者吗?
简单的会话饼干可能比较容易 最后认为JWT是一种工具,而不是宗教.
适合时使用:无国籍的API,微服务,或交叉域名.
对于经典的服务器转发的应用程序,传统会话往往比较简单.
混淆来自将符号格式与认证策略相混合.
让他们分开,你会没事的.