点击“终码一生”,关注,置顶公众号
每日技术干货,第一时间送达!
-
无状态 JWT(Stateless JWT):包含 Session 数据的 JWT Token。Session 数据将被直接编码进 Token 内。 -
有状态 JWT(Stateful JWT):包含 Session 引用或其 ID 的 JWT Token。Session 数据存储在服务端。 -
Session token(又称 Session cookie):标准的、可被签名的 Session ID,例如各类 Web 框架(译者注:包括 Laravel)内已经使用了很久的 Session 机制。Session 数据同样存储在服务端。
1
2
-
易于水平扩展 -
易于使用 -
更加灵活 -
更加安全 -
内置过期时间功能 -
无需询问用户「本网站使用 Cookies」 -
防止 CSRF 攻击 -
更适用于移动端 -
适用于阻止 Cookies 的用户
易于水平扩展
易于使用?
-
若出于系统功能目的使用 Session 或 Token(例如:保持用户的登录态),那么无论怎样存储 Session 均无需征得用户同意。 -
若出于其他目的使用 Session 或 Token(例如:数据分析、追踪),那么无论怎样存储 Session 都需要询问用户是否允许。
-
「存入 Cookie」 :仍然易受 CSRF 攻击,还是需要进行特殊处理,保护其不受攻击。 -
「其他地方,例如 Local Storage」 :虽然不易受到 CSRF 攻击,但你的网站需要 JavaScript 才能正常访问;并且又引发了另一个完全不同,累计更新时长1000+个小时或许更加严重的漏洞。我将在后文详细说明。
3
更不安全
无法单独销毁
数据延迟
实现库缺乏生产环境验证或压根不存在
4
5
JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. [...] enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.
你好,服务器 B,服务器 A 告诉我我可以 < ...Claim... >,这是我的证据:< ...密钥... >。
-
以这种方式使用 JWT,具备几个明确的特性: -
Tokens 生命期较短。它们只需在几分钟内可用,让客户端能够开始下载。 -
Tokens 仅单次使用。应用服务器应当在每次下载时颁发新的 Token。所以任何 Token 只用于一次请求就会被抛弃,不存在任何持久化的状态。
往期推荐


