node.js - json web token 将数据保存在哪里?

标签 node.js jwt

我有一个使用 json 网络 token 的 Node 应用程序:

var jwt = require('jsonwebtoken');

如果登录成功,那么这个库会以这种方式创建一个 token :

var payload = {mydata: 'abcd'};
var token = jwt.sign(payload, 'secret', {
    expiresIn: 28800
});

return {
    success: true,
    message: 'Success',
    token: token
};

我不明白的是 token 在服务器上的存储位置。 如果收到 token 的同一个用户调用 protected 资源,那么我有这一行:

jwt.verify(token_sent_by_used, 'secret', function (err, res) {
    if(!err){
        res.json({result: 'success'});
    }
    else{
        res.json({result: 'failure'});
    }
}

我问这个问题的原因是我找不到关于在多台机器上运行应用程序时如何处理 jwt 的解释。 如果我的后端放在不同的机器上并且用户向负载均衡器发出请求,那么请求可以到达任何机器。 如果 jwt 在文件系统上写入 token 数据,那么我想如果请求命中的机器不是创建 token 的机器,就会出现问题。 使用session时,可以将session handler设置为database。你如何用 jwt 解决这个问题?

****编辑****

好的,让我们举个例子。 我有一个在机器 .10 上运行的 Node 应用程序,同样的 Node 应用程序也在机器 .11 上运行。两台不同的机器。

我转到机器 .10 并发送用户名密码。机器 .10 上的应用程序检查用户名/密码。他们都还好。机器 .10 创建一个 jwt token 并将其发送给我。

我现在向机器 .11 发出 curl 请求(对需要有效 jwt token 的资源),并发送机器 .10 珍贵地发送给我的 jwt token 。机器 .11 不会提示 jtw-token?它会被认为是有效的吗?即使它不是在机器 .11 上创建的?

最佳答案

您问题中的两台服务器都必须能够验证 token - 它们必须能够生成签名。如果两个服务器共享相同的 key (最初用于在 .10 上生成 token 的签名),那么两者都能够验证其内容。

在下面的截图中,红色部分和紫色部分都是明文,任何人都可以阅读和修改。然而,蓝色部分是特殊的 - 它只能在服务器上生成,红色和紫色部分,使用 key 。因此,它保证了红色和紫色部分没有被篡改。

enter image description here

因此,当您将整个 JTW​​ 发送回服务器时,它可以使用 key 生成蓝色部分并将其与您发送的蓝色部分进行比较。如果它们不匹配,则有人(非法)更改了红色或紫色部分,因此身份验证被拒绝。

关于node.js - json web token 将数据保存在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42070260/

相关文章:

cookies - 将凭据/ token 保存在 cookie 中?

android - Facebook、Twitter 和 Instagram 等应用程序如何避免用户重新登录应用程序?

jwt - 承载未通过身份验证 : Signature validation failed

javascript - 如何在 node.js 中使用 gm 将图像转换为 webp

node.js - browserslist 查询如何组合在多行 browserslist 配置中?

javascript - 如何从http请求NodeJS中获取变量?

jwt - 将 on_premise_sam_account 属性添加到 Azure 广告的 JWT 声明

javascript - jwt.verify() 的 Node.js 回调

javascript - 如何在每次调用 JS 函数时生成一个新的 HTML 元素

node.js - 在 Nodejs 的 azure github 操作中使用工件