验证节点 PEM_read_bio_PUBKEY 上的 RS256 jwt 失败
Verify a RS256 jwt on node PEM_read_bio_PUBKEY failed
我正在尝试
我正在尝试验证使用 RS256
算法的 jwt
。使用 hs256
算法时一切正常
let opts = {
audience: 'y',
issuer: `https://x.auth0.com/`,
algorithms: ["RS256"]
}
jwt.verify(payload.token, 'secret', opts, (err, decoded) => {
if (err) {
console.log("invalid token in iamonline service " + err.message);
return;
}
我一直收到错误消息:PEM_read_bio_PUBKEY failed
虽然 auth0
有 documentation 这样做,但它假定您使用的是 express,而我没有。我是通过 websocket 做的,所以没有中间件。
烦人的一点是 HS256
对我来说很好,但 auth0 自定义登录表单似乎需要 RS256
。
RS256
需要 public 密钥来验证,但您提供的是字符串
jwt.verify(payload.token, 'secret', opts, (err, decoded) => {
查看 auth0 的文档
jwt.verify(token, secretOrPublicKey, [options, callback])
token
is the JsonWebToken string
secretOrPublicKey
is a string or buffer containing either the secret for HMAC algorithms, or the PEM encoded public key for RSA and ECDSA.
您需要提供 PEM public 密钥而不是 secret
。 PEM 文件内容将以 -----BEGIN PUBLIC KEY-----
开头
var publicKey = fs.readFileSync('public.pem');
我正在尝试
我正在尝试验证使用 RS256
算法的 jwt
。使用 hs256
算法时一切正常
let opts = {
audience: 'y',
issuer: `https://x.auth0.com/`,
algorithms: ["RS256"]
}
jwt.verify(payload.token, 'secret', opts, (err, decoded) => {
if (err) {
console.log("invalid token in iamonline service " + err.message);
return;
}
我一直收到错误消息:PEM_read_bio_PUBKEY failed
虽然 auth0
有 documentation 这样做,但它假定您使用的是 express,而我没有。我是通过 websocket 做的,所以没有中间件。
烦人的一点是 HS256
对我来说很好,但 auth0 自定义登录表单似乎需要 RS256
。
RS256
需要 public 密钥来验证,但您提供的是字符串
jwt.verify(payload.token, 'secret', opts, (err, decoded) => {
查看 auth0 的文档
jwt.verify(token, secretOrPublicKey, [options, callback])
token
is the JsonWebToken string
secretOrPublicKey
is a string or buffer containing either the secret for HMAC algorithms, or the PEM encoded public key for RSA and ECDSA.
您需要提供 PEM public 密钥而不是 secret
。 PEM 文件内容将以 -----BEGIN PUBLIC KEY-----
var publicKey = fs.readFileSync('public.pem');