当前位置: 首页 > 面试题库 >

JWT(JSON Web令牌)自动延长有效期

汪永春
2023-03-14
问题内容

我想对我们的新REST
API实施基于JWT的身份验证。但是,由于在令牌中设置了有效期,是否可以自动延长有效期?我不希望用户在此期间正在使用该应用程序的情况下,每隔X分钟登录一次。那将是巨大的用户体验失败。

但是,延长有效期将创建一个新令牌(旧令牌在过期之前仍然有效)。在每个请求之后生成一个新令牌对我来说听起来很愚蠢。当多个令牌同时有效时,听起来像一个安全问题。当然,我可以使用黑名单来使旧的使用过的无效,但我需要存储令牌。JWT的好处之一是无需存储。

我发现Auth0如何解决它。它们不仅使用JWT令牌,还使用刷新令牌:https : //docs.auth0.com/refresh-token

但是同样,要实现此功能(不使用Auth0),我需要存储刷新令牌并保持其过期。那么,真正的好处是什么?为什么不只有一个令牌(而不是JWT)并在服务器上保留到期时间?

还有其他选择吗?使用JWT是否不适合这种情况?


问题答案:

我在Auth0工作,并参与了刷新令牌功能的设计。

这完全取决于应用程序的类型,这是我们推荐的方法。

网络应用

一个好的模式是在令牌过期之前刷新令牌。

将令牌到期时间设置为一周,并在用户每次打开Web应用程序时以及每小时一小时刷新令牌。如果用户超过一个星期没有打开应用程序,则他们将不得不再次登录,这是可以接受的Web应用程序UX。

要刷新令牌,您的API需要一个新的终结点,该终结点将接收有效的,未到期的JWT,并返回带有新到期字段的相同签名的JWT。然后,Web应用程序会将令牌存储在某处。

移动/本机应用

大多数本机应用程序只登录一次。

这个想法是,刷新令牌永远不会过期,并且可以始终将其交换为有效的JWT。

永不过期的令牌的问题在于, 永不
意味着永不。如果手机丢了怎么办?因此,它需要以某种方式由用户识别,并且应用程序需要提供一种撤消访问的方法。我们决定使用设备的名称,例如“ maryo’s
iPad”。然后,用户可以转到该应用程序并撤消对“ maryo的iPad”的访问权限。

另一种方法是在特定事件上撤销刷新令牌。一个有趣的事件是更改密码。

我们认为JWT在这些用例中没有用,因此我们使用随机生成的字符串并将其存储在自己的一边。



 类似资料:
  • 我使API服务器与Node.js和快递。 我还为auth用户使用了JWT令牌身份验证。 如果令牌过期,我的场景就在这里。 > ,因为它不会检查签名是否正确。 对于提取过期令牌的有效负载,有什么解决方案吗? 谢谢。

  • 我一直在使用Charles调试移动应用程序和API之间的通信。 我们现在将客户端(app)和服务器都更改为使用JSON Web令牌(JWT)。 有没有办法配置Charles,以便在浏览请求时对JWT进行解码? 基本上,请求(从移动应用程序到服务器)将由一个包含JWT的标头(授权)组成,当我在Charles中单击该请求时,我想看到: -原始令牌 -解码标头 -解码负载 查看Charles的文档,我发

  • 我遵循本教程使用JWT令牌。令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌无效,该怎么办?我希望能够对API进行调用,以删除我的令牌。 我正在使用Express和Node。 从我能收集到的信息来看,我的选择是拥有一个存储令牌的令牌db。当我想让我的令牌过期时,我会从DB中过期/删除该令牌。 我还看到人们随意地说“移除”物理硬盘空间中的令牌,但我无法找出令牌的物理存储位置,以便我移除它。

  • 那么有人能告诉我如何避免这种情况吗?

  • 我们正在使用JWT Nuget来创建和验证令牌。下面是我们用来创建令牌的代码 我的理解是,这不会加密令牌,因为我能够通过访问jwt.io解析令牌,并且能够读取内容。我想加密令牌,这样它就不应该被解析。我在JWT Nuget中找不到任何可以加密令牌的方法。 那么如何使用JWT nuget对令牌进行签名和加密呢? 编辑: 我知道JWT不需要任何加密,因为只有经过身份验证的用户才能读取令牌,这意味着,我

  • 我已经验证了JWT令牌,它在会话存储中。 计算机1以普通用户身份登录计算机2以管理员身份登录 如果我在会话存储中将机器1 jwt令牌替换为机器2,并且如果我进一步调用api,服务器应该说未经授权的访问。