如何查看存储在 JWT 中的数据?使用 auth0 和 express-jwt
How do I view the data stored in a JWT? Using auth0 and express-jwt
现在我相信我已经正确设置了大部分内容。 Auth0 将 jwt 保存到客户端,然后客户端将其用于未来的请求。我使用 express-jwt 来验证令牌。通过阅读 Auth0 文档,我认为我需要客户端密码(当我使用它来解码 jwt 时,我得到一个奇怪的错误:UnauthorizedError: error:0906D06C:PEM routines:PEM_read_bio:no start line
)所以我只是想知道这个秘密密钥来自哪里?
谢谢
将 JWT 解码为签名方案等的当前代码:
const jwtCheck = jwt({
秘密:jwks.expressJwtSecret({
缓存:真,
速率限制:真,
jwksRequestsPerMinute:5,
jwksUri: '<a href="https://xelitexirish.eu.auth0.com/.well-known/jwks.json" rel="nofollow noreferrer">https://xelitexirish.eu.auth0.com/.well-known/jwks.json</a>'
}),
听众:'<a href="https://www.shaunoneill.com" rel="nofollow noreferrer">https://www.shaunoneill.com</a>',
发行人:'<a href="https://xelitexirish.eu.auth0.com/" rel="nofollow noreferrer">https://xelitexirish.eu.auth0.com/</a>',
算法:['RS256']
});
根据 OP 的评论,要读取 JWT 主体的值,只需对其进行 base64 解码即可。您可以为此使用库,例如 jwt-decode for nodejs.
请参阅下面的示例用法(取自 lib 的自述文件):
var jwtDecode = require('jwt-decode');
var token = 'eyJ0eXAiO.../// jwt token';
var decoded = jwtDecode(token);
console.log(decoded);
/* prints:
* { foo: "bar",
* exp: 1393286893,
* iat: 1393268893 }
*/
您的令牌(此处指 ID 令牌)中的声明取决于您在身份验证时提供的内容 scope
。例如,如果您使用 scope: openid profile email
,您将在 ID 令牌中返回所有内容。
这里,假设 JWT 是使用库验证的,现在你有了 JWT,你想阅读一些来自正文的声明。
如果您使用的是 express-jwt 中间件,则有效负载默认保存在请求对象中,您可以像这样访问它request.user
端点示例:
//jwtMiddleware is express-jwt middleware
app.get('/', jwtMiddleware, function (req, res) {
console.log(req.user);
res.send('hello world');
});
现在我相信我已经正确设置了大部分内容。 Auth0 将 jwt 保存到客户端,然后客户端将其用于未来的请求。我使用 express-jwt 来验证令牌。通过阅读 Auth0 文档,我认为我需要客户端密码(当我使用它来解码 jwt 时,我得到一个奇怪的错误:UnauthorizedError: error:0906D06C:PEM routines:PEM_read_bio:no start line
)所以我只是想知道这个秘密密钥来自哪里?
谢谢
将 JWT 解码为签名方案等的当前代码:
const jwtCheck = jwt({ 秘密:jwks.expressJwtSecret({ 缓存:真, 速率限制:真, jwksRequestsPerMinute:5, jwksUri: '<a href="https://xelitexirish.eu.auth0.com/.well-known/jwks.json" rel="nofollow noreferrer">https://xelitexirish.eu.auth0.com/.well-known/jwks.json</a>' }), 听众:'<a href="https://www.shaunoneill.com" rel="nofollow noreferrer">https://www.shaunoneill.com</a>', 发行人:'<a href="https://xelitexirish.eu.auth0.com/" rel="nofollow noreferrer">https://xelitexirish.eu.auth0.com/</a>', 算法:['RS256'] });
根据 OP 的评论,要读取 JWT 主体的值,只需对其进行 base64 解码即可。您可以为此使用库,例如 jwt-decode for nodejs.
请参阅下面的示例用法(取自 lib 的自述文件):
var jwtDecode = require('jwt-decode');
var token = 'eyJ0eXAiO.../// jwt token';
var decoded = jwtDecode(token);
console.log(decoded);
/* prints:
* { foo: "bar",
* exp: 1393286893,
* iat: 1393268893 }
*/
您的令牌(此处指 ID 令牌)中的声明取决于您在身份验证时提供的内容 scope
。例如,如果您使用 scope: openid profile email
,您将在 ID 令牌中返回所有内容。
这里,假设 JWT 是使用库验证的,现在你有了 JWT,你想阅读一些来自正文的声明。
如果您使用的是 express-jwt 中间件,则有效负载默认保存在请求对象中,您可以像这样访问它request.user
端点示例:
//jwtMiddleware is express-jwt middleware
app.get('/', jwtMiddleware, function (req, res) {
console.log(req.user);
res.send('hello world');
});