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

时间:2019-04-20 17:41:52

标签: python jwt mobile-application

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

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

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

当前,令牌的失效发生在其创建后的6个月内。 我觉得这是一个不太安全的设置。

从我所看到的所有示例中,JWT的生命周期都很短,然后会有某种“刷新令牌”对其进行更新。

但这就是我所知道的。我不太了解如何用Python编写代码。

有人可以帮忙解释一下此刷新令牌是什么,它到底是做什么的,如何创建的,等等。

更新:

关于JWT的规范,我读到:https://tools.ietf.org/html/rfc7519

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

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

拥有一个logout API端点来发送令牌并将其添加到黑名单中是否值得,因此没有人可以窃取它吗?

1 个答案:

答案 0 :(得分:1)

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

这个主题非常广泛和复杂。您可以参考my blog post -它提供有关所有会话流及其安全性的信息,并且具有端到端的实现库。