gpt4 book ai didi

node.js - 验证 Auth0 JWT 抛出无效算法

转载 作者:搜寻专家 更新时间:2023-10-31 22:42:52 25 4
gpt4 key购买 nike

我已经创建了一个 Auth0 客户端,我正在登录并收到此 token :

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik1rVkdOa1l5T1VaQ1JqTkRSVE5EUmtNeU5rVkROMEUyUTBVMFJrVXdPVEZEUkVVNU5UQXpOZyJ9.eyJpc3MiOiJodHRwczovL3RvdGFsY29tbW56LmF1LmF1dGgwLmNvbS8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwMzI5NzA4OTYyMTk5NjUwMjY2MiIsImF1ZCI6ImxTWUtXMUZZdENkMWJLQmdXRWN0MWpCbmtDU3R2dW5SIiwiaWF0IjoxNTA5ODYyMTI1LCJleHAiOjE1MTAyMjIxMjV9.kjmckPxLJ4H9R11XiBBxSNZEvQFVEIgAY_jj2LBy4sEJozBB8ujGE7sq9vEIjMms-Lv2q9WzFQPrqcxyBcYC4Je4QojMgvqLDCodtpot0QUle8QfGmonc1vZYIZyX-wqyOXtRqhoZVEKTeLhm9Le2CV4_a3BwgjkE1LjcDx01GZfsnaId8mh10kGk-DBmr5aVc8MxglLCq5Uk8Zbl2vDc__UMDgx1eQPQg-zve4fUf8zHcxizypYTnF_v0dEAT00L2j5J41SFYdWvP6ReQ3vhVYew2o9iM6u1s75HE-xW8s4pzV4BZAQtgfgIeCd6aVGZs76bcnQXBLej1B7zaPBvA

我现在要做的是使用 jsonwebtoken 验证 token .该 token 使用 RS256 算法签名。

我将签名证书下载为 .pem,并且我成功使用它来验证 token ,如下所示:

var cert = fs.readFileSync('certificate.pem');
jwt.verify(token, cert, {algorithm: 'RS256'}, (err, decoded) => {
console.log(err)
console.log(decoded)
});

我想做的是使用 secret (在 Auth0 客户端设置中称为 Client Secret 并且是一个字符串)验证 token ,但它不起作用。

jwt.verify(token, MYSECRET, {algorithm: 'RS256'}, (err, decoded) => {
console.log(err)
console.log(decoded)
});

这段代码总是会抛出一个错误:

{ JsonWebTokenError: invalid algorithm
at Object.module.exports [as verify] (C:\code\aws\learn-authorizer\node_modules\jsonwebtoken\verify.js:90:17)
at Object.<anonymous> (C:\code\aws\learn-authorizer\testme.js:25:5)
at Module._compile (module.js:624:30)
at Object.Module._extensions..js (module.js:635:10)
at Module.load (module.js:545:32)
at tryModuleLoad (module.js:508:12)
at Function.Module._load (module.js:500:3)
at Function.Module.runMain (module.js:665:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3 name: 'JsonWebTokenError', message: 'invalid algorithm' }

我的问题是:如何使用 key 而不是使用证书文件来验证 RS256 token ? (我也尝试创建一个使用 HS256 算法的新客户端,但我得到了同样的错误)。

最佳答案

如果您使用 key ,那么使用 RS256 将不起作用,因为它基于私钥/公钥对。仅使用 key 通常表示 H256。在我的回答中,我假设您所说的 MYSECRET 只是 certificate.pem 的内容。

无论如何,我假设你的字符串必须包含

-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----

PUBLIC 而不是 PRIVATE

您可以在 source 中看到这个.您的错误消息中提到的行包含:

if (!~options.algorithms.indexOf(header.alg)) {
return done(new JsonWebTokenError('invalid algorithm'));
}

options.algorithms定义为

if (!options.algorithms) {
options.algorithms = ~secretOrPublicKey.toString().indexOf('BEGIN CERTIFICATE') ||
~secretOrPublicKey.toString().indexOf('BEGIN PUBLIC KEY') ?
[ 'RS256','RS384','RS512','ES256','ES384','ES512' ] :
~secretOrPublicKey.toString().indexOf('BEGIN RSA PUBLIC KEY') ?
[ 'RS256','RS384','RS512' ] :
[ 'HS256','HS384','HS512' ];

}

如果您在开始和结束时没有 RSA,它将查找以下算法:'HS256','HS384','HS512'

我以前没有用过JWT的RS256,但是我用过ssh,我知道它对有header很敏感。字符串的格式必须完全正确。

关于node.js - 验证 Auth0 JWT 抛出无效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47119043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com