如何查看存储在 JWT 中的数据?使用 auth0 和 express-jwt
Posted
技术标签:
【中文标题】如何查看存储在 JWT 中的数据?使用 auth0 和 express-jwt【英文标题】:How do I view the data stored in a JWT? Using auth0 and express-jwt 【发布时间】:2018-06-20 07:02:05 【问题描述】:现在我相信我已经正确设置了大多数东西。 Auth0 将 jwt 保存到客户端,然后客户端将其用于将来的请求。我使用 express-jwt 来验证令牌。通过阅读 Auth0 文档,我认为我需要客户端密钥(当我使用它来解码 jwt 时,我得到一个奇怪的错误:UnauthorizedError: error:0906D06C:PEM routines:PEM_read_bio:no start line
)所以我只是想知道这个密钥是从哪里来的?
谢谢
仅将 JWT 解码为其签名方案等的当前代码:
const jwtCheck = jwt(
secret: jwks.expressJwtSecret(
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: '@987654321@'
),
audience: '@987654322@',
issuer: '@987654323@',
algorithms: ['RS256']
);
【问题讨论】:
在您问题中提供的代码中,您使用的是JWKS
和RS256
- 因此验证令牌不需要客户端密码。由于您提供的信息有限,因此难以进一步发表评论。你想达到什么目的?
抱歉回复晚了,据我所知 Auth0 将用户配置文件编码到 JWT 中,因此您可以访问用户名和电子邮件等。这是我正在尝试阅读的信息
感谢您的澄清 - 所以您想阅读 JWT 正文中的声明。请在下面查看我的答案。
这个网站有助于将 JWT 粘贴进去,并查看它的解码效果 - jwt.io
我的意思是,主机网站可以访问登录用户的用户名,但是如果服务器对令牌进行解码,它只会获取 base 64 解码的内容,而不是已经在令牌
【参考方案1】:
如果您使用的是 express-jwt 中间件,那么负载默认保存在请求对象中,您可以像这样访问它request.user
端点示例:
//jwtMiddleware is express-jwt middleware
app.get('/', jwtMiddleware, function (req, res)
console.log(req.user);
res.send('hello world');
);
【讨论】:
【参考方案2】:根据 OP 的评论,要读取 JWT 正文的值,只需对其进行 base64 解码。您可以为此使用库,例如 jwt-decode 用于 nodejs。
请参阅下面的示例用法(取自 lib 的 README):
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,如果它来自正文的声明。
【讨论】:
以上是关于如何查看存储在 JWT 中的数据?使用 auth0 和 express-jwt的主要内容,如果未能解决你的问题,请参考以下文章