【问题标题】:JWT Token Refresh InvokingJWT 令牌刷新调用
【发布时间】:2020-12-26 16:23:18
【问题描述】:

我了解如何使用 JWT 令牌进行身份验证/授权。但是,没有特定的方法调用或事件调用代码以使用刷新令牌在路径“/token”处提供新令牌。请回答,当令牌过期时,NPM 包 'jsonwebtoken' 会在后台自动调用下面的代码,还是有我在教程中缺少的手动调用方法?

let refreshTokens = []; //in production use redis or other...

app.post('/token', (req, res) => {
    const refreshToken = req.body.token;
    if (refreshToken == null) return res.sendStatus(401);
    if (refreshTokens.includes(refreshToken)) return res.sendStatus(403);
    jwt.verify(refreshToken, process.env.REFRESH_TOKEN_SECRET, (err, user) => {
        if (err) return res.sendStatus(403);
        const accessToken = generateAccessToken({ name: user.name });
        res.json({ accessToken: accessToken });
    })
})

【问题讨论】:

  • “自动在幕后”是什么意思不是很清楚。 jwt.verify 在被调用后立即“发生”一次。这能回答你的问题吗?
  • 谢谢,我知道 .verify() 是一个关键字。我的问题是,这个 POST 方法什么时候运行以及它是如何调用的?显然,用户从未点击过 URL /token.
  • 考虑到很多假设,只要有传入的POST /token 请求,此代码就会运行 - 不一定由用户手动触发(例如,有一个 fetch() 函数)
  • if (refreshTokens.includes(refreshToken)) return res.sendStatus(403); - 所以传入的refreshToken存在就报错?
  • 我相信这行意味着如果数组中存在刷新令牌,则不要重复运行块的其余部分。也许这就是答案——这个 POST 方法是否表现得像一个 IIFE 并被 403 限制? @Dima Parzhitsky 的问题是我在任何地方都找不到 fetch(),显然用户不使用那条路线。

标签: javascript node.js express authentication jwt


【解决方案1】:

澄清一下,这更像是一个沟通错误。通常 JWT 令牌生态系统被教导为服务器端进程,而没有提到刷新端点是由客户端从登录表单等事件调用的,就像任何其他服务器端端点一样。这是 JWT 流程完整教程的一个很好的示例。说起来很简单。

https://github.com/manosriram-youtube/jwt-auth

【讨论】:

    【解决方案2】:

    您创建的 post 方法永远不会自动执行,因为我们知道 http 协议适用于请求和响应模型单元,除非我们不发出请求,否则它不会执行,并且在给出响应后它会关闭它们的连接

    阅读这篇文章会对你有所帮助

    https://jasonwatmore.com/post/2020/06/17/nodejs-mongodb-api-jwt-authentication-with-refresh-tokens

    【讨论】:

    • 谢谢,上周末我读了那篇文章。几个月前,我在 Github 上找到了这个人。您能帮我理解一下,JWT 流程中调用的 POST 方法在哪里?我总是阅读教程的代码,始终找不到请求的实际调用。
    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 2016-06-25
    • 1970-01-01
    • 2018-09-13
    • 2019-10-10
    • 2021-04-06
    • 2017-10-11
    • 2016-10-14
    相关资源
    最近更新 更多