存储用于编码/解码令牌数据的 JWT 密钥的安全方式

Posted

技术标签:

【中文标题】存储用于编码/解码令牌数据的 JWT 密钥的安全方式【英文标题】:Secure way of storing JWT secret key used to encode/decode token data 【发布时间】:2022-01-09 17:08:01 【问题描述】:

我正在使用 FastApi 构建一个 Python 应用程序,并且我正在使用 JWT 和 OAuth2 密码流对用户进行身份验证,如他们的文档中所述。当用户登录时,它会收到一个使用 HS256 算法和用户密钥生成的令牌。此令牌作为本地存储存储在浏览器中。然后对于依赖于当前登录用户的每个请求,令牌被发送到后端,使用相同的密钥进行解码并提供所需的信息。在我的应用程序中,我有一个 PostgreSQL 数据库,我的问题是我应该将用于为我拥有的不同类型的用户生成令牌并保护这些密钥的安全密钥存储在哪里。

谢谢

【问题讨论】:

您不必在数据库中保留 JWT 的副本,只需使用私钥来验证令牌。你在使用多个密钥吗? 是的。并且将这个密钥保存在数据库中是否足够安全? 您应该将其保存在生产系统上的 ENV 变量中,以便在需要时能够轻松地重新生成它们 不同类型的用户,是指角色库授权? @sahasrara62 是的,但此时我专注于身份验证 【参考方案1】:

推荐的方法是:

创建一个.env 文件并将SECRET 存储在其中 在项目根目录下创建一个settings.py文件 将SECRET.env导入settings.py中的一个变量并使用它

【讨论】:

以上是关于存储用于编码/解码令牌数据的 JWT 密钥的安全方式的主要内容,如果未能解决你的问题,请参考以下文章

客户端应用 jwt 令牌解码和验证安全

JWT 令牌解码

JWT 刷新令牌的全部意义是啥?

如何安全地存储和处理 JWT 的密钥

使用 jwt decode 来解码 react js 中的令牌是不是安全?

如何在 PHP 中检查没有密钥的 JWT 完整性?