【问题标题】:JWT refresh Token ImplementationJWT 刷新 Token 实现
【发布时间】:2021-04-26 16:43:20
【问题描述】:

我可以将刷新令牌放在访问令牌中,而不是在登录后返回两个令牌吗?

当访问令牌过期时,用户需要通过过期令牌来获取新的访问令牌。当过期令牌到达服务器时,我将从其中提取刷新令牌并检查刷新令牌的过期时间,如果没问题,我将返回一个新令牌,其中包含相同的刷新令牌。如果不正常,则用户将被注销并需要登录。

【问题讨论】:

    标签: javascript express jwt refresh-token


    【解决方案1】:

    可以在访问令牌中保存刷新令牌,然后在刷新时访问它,但我不明白您为什么要这样做?我从未见过有人这样做,所以我会说这可能不是好的做法。我会坚持在标题中将它们分开。

    【讨论】:

    • 我正在开发 oauth,我不想通过返回两个令牌来增加 android/web 开发人员的任务。我想在任何地方都使用一个令牌。如果您从未见过有人这样做,则意味着我可能是第一个这样想的人。
    • 我明白你的意思,我认为你高估了单独存储它们的工作量。
    • 您也可以尝试 btoa(JSON Object),它会生成对象的字符串表示,然后将单个“令牌”发送到 API。这样,您的字符串可以再次解码为 JSON 表示,并且仍然包含所有信息(Auth 令牌、刷新令牌、令牌年龄...)???
    【解决方案2】:

    您可以将刷新令牌与访问令牌结合使用。但请记住,如果您不遵循 JWT 方式,您的代码将无法与其他程序和 API 兼容。 此外,在对 API 的每次请求时刷新令牌可能是一个好习惯,不仅是在它接近到期时。

    不确定这是否是最佳实践,但我在我的一个节点服务中这样做: https://github.com/kihyoun/system-wizard/blob/master/src/api/SyncServer.tsx#L74(客户端) https://github.com/kihyoun/system/blob/master/sync/src/index.ts(服务器)

    编辑:

    如果您想将两个令牌组合成一个“令牌”,您可能可以这样做:

    client

    const authentication = {
      accessToken: "your accesstoken...",
      refreshToken: "your refreshToken...",
      action: "getBlogPosts"
    };
    
    const data = btoa(authentication) // this creates a single ASCII String
    api.post('/auth', data).then(result => {
      if (result.status === 200) {
        console.log('auth successful')   
      } else {
        console.log('Invalid credentials')
      }
    })
    

    server

    api.post('/auth', (request, response) => {
        const data = atob(request.data);
        if (jwt.verify(data.accessToken) {
          this.action = data.action;
          switch (data.action) {
            case "getBlogPosts": //...do some stuff
    ...
    ...
    

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 2021-10-27
      • 2014-12-22
      • 1970-01-01
      • 2023-04-04
      • 2019-12-28
      相关资源
      最近更新 更多