Angular 8:如何在没有刷新令牌的情况下刷新令牌

时间:2019-10-31 18:59:44

标签: angular authentication jwt refresh-token jwt-auth

不使用刷新令牌,OAuth等时刷新令牌的首选方法是什么?

当用户根据我的API进行身份验证(仅持续几分钟)时,我才创建JWT。

然后在拦截器中使用令牌访问我的API的安全路由。

我想在旧令牌过期前几分钟刷新令牌,而无需将用户重定向到登录屏幕。

从技术上讲,这不是问题(也没有刷新令牌)。

但是始终刷新它是否安全?我想我已经知道答案了……不是。

我知道使用刷新令牌是首选方法。

但是还有另一种方法吗?您如何实现这种行为?

1 个答案:

答案 0 :(得分:1)

一种方法是将现有令牌用作刷新令牌。

在您的interceptor中或您要检查用户是否已通过身份验证的任何地方,您还可以检查令牌是否即将到期。

您可以对令牌进行解码以找到其到期日期和时间。您可以选择在到期前X天或任何时候续订。

请记住,您可以在不知道密钥的情况下解码JWT令牌。 解密令牌需要密钥,而解码则不需要密钥。您可以使用jwt-decode之类的库来解码令牌或write a function to do it by yourself

在后端,您应该具有一个API端点,该端点可以接受当前的JWT令牌,如果有效,则创建并返回具有相同内容的新令牌。

  

但是始终刷新它是否安全?

您已经知道,始终刷新它是不安全的。这是因为,如果恶意实体可以访问令牌,则他们可以对其进行续订以获取具有延长的到期时间的新令牌。该新令牌可用于在到期之前再次进行续签。这可能会无限期地继续下去,直到我们识别出这些令牌并停止对其进行续签。

您可以采取一些措施来使其更加安全:

  • 跟踪后端上每个用户的续订计数,并在达到阈值后停止续订。
  • 停止在X周或特定时间之前发行的续签令牌。

通过这种方式在续订或一定时间后,用户必须再次进行身份验证并获得新令牌。