验证节点 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

虽然 auth0documentation 这样做,但它假定您使用的是 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');