首页 > 解决方案 > 使用 JWT 进行身份验证的最佳实践

问题描述

我已经阅读了很多与 JWT(JSON Web 令牌)用于身份验证相关的文章并且非常困惑,因为每个人对什么是使用它们的安全方式都有不同的看法。说安全是指处理注销和密码更改。此外,哪些数据不应该保存在 JWT 有效负载中。

我的问题 - 使用 JWT 进行身份验证时是否有任何行业标准,如果有,它们是什么?如果不是,在 JWT 中保存密码哈希和注销日期以处理注销和密码更改是否安全,如果不是,还有什么替代方法?

标签: authenticationjwt

解决方案


使用 JWT 进行身份验证时是否有任何行业标准,如果有,它们是什么?

首先,访问令牌(作为任何类型的敏感信息)只能通过安全连接发送。

据我了解,您希望能够在发生某种事件时撤销令牌。在这种情况下,您应该考虑在服务器的某个位置跟踪令牌。

为此,您可以为每个令牌分配一个唯一标识符,然后将该标识符存储在您的服务器中。验证令牌时,除了检查签名和到期日期外,还必须检查令牌标识符是否列入白名单。

并且,要为每个令牌分配唯一标识符,您可以使用jti声明:

4.1.7. “jti”(JWT ID)声明

( jtiJWT ID) 声明为 JWT 提供唯一标识符。标识符值的分配方式必须确保相同的值被意外分配给不同的数据对象的可能性可以忽略不计;如果应用程序使用多个发行者,则必须防止不同发行者产生的值之间的冲突。该jti声明可用于防止 JWT 被重放。该jti值是区分大小写的字符串。使用此声明是可选的。


如果不是,在 JWT 中保存密码哈希和注销日期以处理注销和密码更改是否安全,如果不是,还有什么替代方法?

如果您的 JWT 是 JWS,则不应将任何被视为敏感的信息放入有效负载中。


推荐阅读