正确的 JWT 身份验证架构和流程

Proper JWT authentication architecture and flow

我正在构建一个应用程序,它具有 iOS 和 Android 的前端,以及由 Flask API 和 MySQL 数据库组成的后端。

现在,我们的身份验证使用 JWT。除了我不确定我是否完全理解它应该如何工作。

我不知道在哪里可以找到 JWT 的规范,所以当我说 JWT 时,我只是指使用 PyJWT 库加密的 JSON 有效负载。

目前,令牌在创建后 6 个月到期。 我觉得这是一个相当不安全的设置。

从我见过的所有例子来看,JWT 的生命周期很短,然后有某种“刷新令牌”可以更新它。

但这就是我所知道的。我不太了解它,无法在 Python.

中进行编码

谁能帮忙解释一下这个刷新令牌是什么,它到底是做什么的,它是如何创建的等等?

更新:

关于 JWT 的规范,我是这样读的:https://www.rfc-editor.org/rfc/rfc7519

它没有提到任何刷新令牌。

所以现在我的问题是,我所做的是否足够安全?

有一个 logout API 端点发送令牌并将其添加到黑名单,这样就没有人可以窃取它是否值得?

JWT 的六个月时间太长且不安全。您可能希望最多保留几个小时或一天。除此之外,还有一个长期存在的刷新令牌 (RT),您可以使用它来不断获取新的 JWT。刷新令牌的功能是保持长期会话(以便用户可以长时间登录),检测令牌盗窃(如果您在每次使用时不断更改 RT)-因为您提到了盗窃,并使您能够使用短期访问令牌(因为它们最常通过网络公开)。是的,将 JWT 列入黑名单可能是个好主意,但如果您让它们短暂存在,那为什么要这样做?

这个话题相当广泛和复杂。您可以参考 my blog post - 它提供了有关所有会话流及其安全性的信息,并且还有一个 end-to-end 实现的库。