繁体   English   中英

JWT 刷新 Token 实现

[英]JWT refresh Token Implementation

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

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

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

您可以将刷新令牌与访问令牌结合使用。 但请记住,如果您不遵循 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
...
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM