首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图理解jwt身份验证流

试图理解jwt身份验证流
EN

Stack Overflow用户
提问于 2019-03-30 11:08:07
回答 2查看 436关注 0票数 2

因此,我试图理解jwt身份验证的流程,我有一些漏洞,这就是我得到的:

  1. 用户登录
  2. 用户获得jwt访问令牌和刷新令牌(服务器不保留它们)
  3. 访问令牌持续5分钟,刷新令牌持续7天。
  4. 访问令牌过期
  5. 用户向服务器发送刷新令牌
  6. 服务器检查:
    • 如果访问令牌的(过期的)用户id ==刷新令牌的用户id
    • 验证刷新令牌是否过期
    • 可能会验证访问令牌是否过期(不确定)

  1. 如果所有这些条件都正常,服务器将向客户端发送一个新的访问令牌。
  2. 用户照常前进
  3. 刷新令牌过期
  4. 刷新令牌需要验证才能发送新令牌。

我的问题是:

  1. 用户如何发现访问令牌过期?也许客户端应用程序会计算分钟数?或者客户端尝试使用访问令牌,然后得到“令牌过期”响应?
  2. 第六步的所有条件都够了吗?如果有人从客户端获得刷新令牌,我如何防止这种情况发生?条件3也要检查吗?
  3. 服务器如何验证刷新令牌?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-03-30 22:53:15

  1. 不,这不是检查令牌过期的客户端,这是服务器端操作。当然,不,这不是客户端应用程序,它检查过期时间,计算分钟数。是的,客户端发送令牌并获得可能的“令牌过期”响应。
  2. 就像这样简单,如果令牌是有效的,你就可以走了。如果没有(过期的,动摇的)你没有。到期日期在令牌有效负载本身中。您应该对服务器和客户端之间的传输进行加密。
  3. 服务器验证刷新令牌的方式与验证任何令牌的方式相同。通常在用户数据库上对登录/密码进行验证以检查授权。这只是一个更新jwt令牌的工具。

总之,jwt身份验证流比这更简单:

  1. 客户端发送带有身份验证的请求。
  2. 服务器使用认证令牌进行响应。
  3. 客户端使用该令牌与应用程序进行对话。
  4. 如果jwt令牌过期,客户端将发送一个刷新令牌来更新它(可选)
票数 2
EN

Stack Overflow用户

发布于 2019-03-31 09:03:19

JSON令牌由三个部分组成,即头、有效载荷和签名。报头和有效载荷不是加密的,而是编码的(base64),这意味着客户端可以简单地解码这些部分。

因此,要回答您的第一个问题,->,客户端只需对有效负载部分进行解码,并从已登记的债权读取exp属性。如果使用的是节点-jsonwebtoken库,则如下所示:

代码语言:javascript
运行
复制
// get the decoded payload and header
var decoded = jwt.decode(token, {complete: true});
console.log(decoded.header);
console.log(decoded.payload)

为了让服务器验证令牌,您必须从用于签名JWT的密钥对中提供密钥或公钥。使用节点-jsonwebtoken,它将按照以下方式工作:

代码语言:javascript
运行
复制
// verify a token asymmetric
const cert = fs.readFileSync('public.pem');  // get public key
jwt.verify(token, cert, function(err, decoded) {
  console.log(decoded.foo) // bar
});

OR

// verify a token symmetric using secret
const decoded = jwt.verify(token, 'mySecret');
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55430808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档