当前位置: 首页 > 知识库问答 >
问题:

访问令牌与刷新令牌NodeJS

仲孙善
2023-03-14

我不熟悉jwt,它代表JSON Web令牌。我混淆了它的两个术语:访问令牌和刷新令牌。

  1. 用户注册/登录站点后,我创建访问令牌刷新令牌
  2. 将刷新标记保存在数据库或cookie中。
  3. 15分钟后,用户标记访问令牌过期。
  4. 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。

有什么优化的方法可以达到这个目的吗?

共有1个答案

公西繁
2023-03-14

首先,你需要理解JWT的原理,以及它们是如何在服务器和客户机之间传递的,以及如何在服务器端匹配一个秘密--下面是文档

有效载荷可以是任意的用户数据--即:只需一个usrname或id

基本上,您需要一个服务在成功的身份验证(当用户使用正确的凭据登录时,即:usr&pwd)生成令牌,并用令牌创建一个额外的标头,以便在对服务器的进一步请求中使用。

 // INFO: Function to create headers, add token, to be used in HTTP requests
  createAuthenticationHeaders() {
    this.loadToken(); // INFO: Get token so it can be attached to headers
    // INFO: Headers configuration options
    this.options = new RequestOptions({
      headers: new Headers({
        'Content-Type': 'application/json', // INFO: Format set to JSON
        'authorization': this.authToken // INFO: Attach token
      })
    });
  }

  // INFO: Function to get token from client local storage
  loadToken() {
    this.authToken = localStorage.getItem('token');; // Get token and asssign to 
variable to be used elsewhere
  }
 // INFO: Function to store user's data in client local storage
 storeUserData(token, user) {
   localStorage.setItem('token', token); // INFO: Set token in local storage
   localStorage.setItem('user', JSON.stringify(user)); // INFO: Set user in local 
  storage as string
      this.authToken = token; // INFO: Assign token to be used elsewhere
      this.user = user; // INFO: Set user to be used elsewhere
    }

和注销函数,用于销毁本地存储中的令牌,即:

 // INFO: Function for logging out
 logout() {
this.authToken = null; // INFO: Set token to null
   this.user = null; // INFO: Set user to null
   localStorage.clear(); // INFO: Clear local storage
 }

如果使用NPM的jsonwebtoken,则可以在生成令牌时设置令牌的ttl:

const token = jwt.sign({ id: idDB }, "secret", { expiresIn: '24h' }); 

或者您想要的任何ttl,字符串“secret”指的是与服务器匹配的秘密。

顺便说一句:如果我没有理解错的话,你的第3和第4点是相互矛盾的…

在第4种情况下,如果你正确地执行了第3种逻辑,它将在15分钟内被摧毁

 类似资料:
  • 我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)

  • 这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre

  • null 很抱歉太啰嗦了。 提前谢了。

  • 本文向大家介绍oauth 刷新访问令牌,包括了oauth 刷新访问令牌的使用技巧和注意事项,需要的朋友参考一下 示例 资源

  • 若授权服务器给客户端颁发了刷新令牌,客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起刷新请求: grant_type 必需的。值必须设置为“refresh_token”。 refresh_token 必需的。颁发给客户端的刷新令牌。 scope 可选的。如3.3节所述的访问请求的范

  • 这是获得访问代码后测试代码的结果,因此可以看到'new'访问令牌与上一个类似,并且我已经尝试在和fetchAccessTokenWithRefreshToken()的参数上使用。没有得到错误但结果仍然一样... 数组([access_token]=>YA29.GLVQBUGBFZDQN3E8HWD4WFSBB0HLHSYVGZPBE0BOJUB4IEN5PCSOGQXLKEYOU7MEVDLOGO