Angular 8 : How to refresh a token without a refresh token

标签 angular authentication refresh-token jwt

不使用刷新 token 、OAuth 等时刷新 token 的首选方法是什么?

当用户根据我的 API 进行身份验证时,我只是创建一个 JWT,该 API 在几分钟内有效。

然后在拦截器中使用该 token 来访问我的 API 的安全路由。

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

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

但是一直刷新它安全吗?我想我已经知道答案了……答案是否定的。

我知道使用刷新 token 是首选方式。

但是还有别的办法吗?您是如何实现这种行为的?

最佳答案

一种方法是使用现有 token 作为刷新 token 。

在您的 interceptor 中,或者在检查用户是否经过身份验证的任何地方,您还可以检查 token 是否即将过期。

您可以解码 token 以查找其到期日期和时间。您可以选择在到期前 X 天或您需要的任何时间续订。

请记住,您可以在不知道 key 的情况下解码 JWT token 。 解密 token 需要 key ,但解码则不需要。您可以使用像 jwt-decode 这样的库解码 token 或 write a function to do it by yourself .

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

But is it secure to just refresh it all the time?

正如您所知,一直刷新它并不安全。这是因为,如果恶意实体有权访问 token ,他们可以续订该 token 以获得具有延长有效期的新 token 。这个新 token 可以在到期前再次使用。这可能会无限期地持续下去,直到我们识别出这些代币并停止其更新为止。

您可以采取一些步骤来使其更加安全:

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

这样,在一些续订或一定时间后,用户必须再次进行身份验证并获取新 token 。

关于 Angular 8 : How to refresh a token without a refresh token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58649744/

相关文章:

css - 使用 css backface 属性时 Angular Material 输入字段不起作用

angular - Google Map API 仅在 Angular 6 中无法与 StackBlitz 配合使用

php - 使用 HTML Mime Mail for PHP 发送电子邮件,但需要通过 Exchange 服务器进行身份验证

cakephp - cakephp 应用程序中的 SAML SSO

node.js - Google Oauth 交换代码、刷新 token 和访问 token

angular - Concat 不是函数

android - Android 上的指纹认证/避免三星覆盖?

当连接的输出仅提供访问 token 时使用 Curl 的 Azure : How to i get the Refresh Token ?

c# - 不使用 OpenIddict 接收刷新 token

css - Angular Material 更改默认字体颜色