现在我相信我已经正确设置了大部分内容。 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: 'https://xelitexirish.eu.auth0.com/.well-known/jwks.json'
}),
audience: 'https://www.shaunoneill.com',
issuer: 'https://xelitexirish.eu.auth0.com/',
algorithms: ['RS256']
});
答案 0 :(得分:0)
根据OP的评论,要读取JWT正文的值,只需对其进行base64解码即可。您可以使用库,例如jwt-decode用于nodejs。
参见下面的示例用法(取自libME的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,如果它是来自身体的声明,您还想阅读它。
答案 1 :(得分:0)
如果您使用的是express-jwt中间件,那么默认情况下,有效负载会保存在请求对象中,您可以像request.user
端点示例:
//jwtMiddleware is express-jwt middleware
app.get('/', jwtMiddleware, function (req, res) {
console.log(req.user);
res.send('hello world');
});