Node.js expressJS应用程序中的身份验证
我想在expressJS应用程序中使用JWT实现身份验证。Node.js expressJS应用程序中的身份验证,node.js,express,express-jwt,Node.js,Express,Express Jwt,我想在expressJS应用程序中使用JWT实现身份验证。 在谷歌搜索了一些网站后,我了解了JWT的概念,但我无法使用expressJS实现JWT。 我没有在expressJS中得到任何JWT的确切示例。 我已经阅读了节点模块的说明,但我的问题是如何生成JWT以及如何为每个请求验证收到的JWT。 具体流程是什么: 生成JWT 解码JWT 验证JWT 另外,在下面的示例中,秘密的含义是什么: 你需要使用这个软件包。expressjwt包帮助您在使用ExpressJS框架时保护部分API 密
在谷歌搜索了一些网站后,我了解了JWT的概念,但我无法使用expressJS实现JWT。
我没有在expressJS中得到任何JWT的确切示例。
我已经阅读了节点模块的说明,但我的问题是如何生成JWT以及如何为每个请求验证收到的JWT。
具体流程是什么:
另外,在下面的示例中,秘密的含义是什么:
你需要使用这个软件包。
expressjwt
包帮助您在使用ExpressJS框架时保护部分API
密码很像密码。它对有效载荷进行编码,以便敏感信息可以在JWT中传递,而无需操纵。它确保身份验证机制没有被更改,因此服务器可以信任该用户
注意:在某些情况下,您会看到使用RS256算法编码的JWT。这将需要提供公钥/私钥对来验证和解码JWT
生成
sign()
函数在jsonwebtoken
中执行此操作。如果您使用该软件包,您将使用encode()
您可以使用任何密码对JWT进行签名,但必须使用相同的密码才能使用verify()
假设您有以下JSON对象,您想要创建JWT:
var json = { user: 'jdoe',
firstName: 'John',
lastName: 'Doe',
id: 1
};
var token = jwt.sign(json, 'superSecretSquirrel');
您的签名/编码令牌现在看起来像:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiamRvZSIsImZpcnN0TmFtZSI6IkpvaG4iLCJsYXN0TmFtZSI6IkRvZSIsImlkIjoxLCJpYXQiOjE0MzI3NjU3NzJ9.4mowMfRKIENnAKtRdDkj-BZZqAS8_b0eS3nj5qvEu9Q
您可以在进行验证(确保提供此处给出的秘密)
验证和解码
verify()
函数异步执行此操作。它在回调中返回的对象是解码的JWT。为了验证JWT,需要将机密传递给函数
假设“超级秘密松鼠”的秘密如上所示:
var jwt = require('jsonwebtoken');
jwt.verify(token, 'superSecretSquirrel', function (err, decoded) {
if (err)
console.error(err);
// Show the decoded JWT
console.log(decoded);
});
解码的令牌将显示为:
{ user: 'jdoe', firstName: 'John', lastName: 'Doe', id: 1, iat: 1432765772 }
其中,令牌中的iat
是一个表示“在”发出的
现在让我们参考您的示例(我省略了函数并替换了秘密):
这只允许访问路径
/protected
,前提是您有一个用秘密“superSecretSquirrel”签名的JSON Web令牌。如果你有一个与密码不匹配的令牌,你会得到一个未授权的错误,你会想抛出一个HTTP 401。express jwt
只对令牌进行解码/验证,生成由类似的包来完成。机密应该与生成令牌的机密相匹配。
{ user: 'jdoe', firstName: 'John', lastName: 'Doe', id: 1, iat: 1432765772 }
var expressJWT = require('express-jwt');
// Assume app = express();
app.get('/protected',
expressJWT({
secret: 'superSecretSquirrel'
}),
...
);