Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js:签名验证(PS256)在Node.js中成功,但在jwt.io调试器中失败_Node.js_Jwt_Rsa_Auth0 - Fatal编程技术网

Node.js:签名验证(PS256)在Node.js中成功,但在jwt.io调试器中失败

Node.js:签名验证(PS256)在Node.js中成功,但在jwt.io调试器中失败,node.js,jwt,rsa,auth0,Node.js,Jwt,Rsa,Auth0,我编写了一个测试脚本,用它签名,然后用PS256算法验证JWT 我的代码成功地验证了JWT,但在调试器中验证失败 我正在使用jws@3.2.1 这仅在使用PS256算法时发生,而不是在使用例如RS256算法时发生。 我做错什么了吗 我使用以下工具生成了我的密钥: openssl-genpkey-算法RSA-out private_key2.pem-pkeyopt-RSA_keygen_位:2048 openssl rsa-pubout-in private_key2.pem-out public

我编写了一个测试脚本,用它签名,然后用PS256算法验证JWT

我的代码成功地验证了JWT,但在调试器中验证失败

我正在使用
jws@3.2.1

这仅在使用PS256算法时发生,而不是在使用例如RS256算法时发生。

我做错什么了吗

我使用以下工具生成了我的密钥:

openssl-genpkey-算法RSA-out private_key2.pem-pkeyopt-RSA_keygen_位:2048
openssl rsa-pubout-in private_key2.pem-out public_key2.pem
您可以在repl.it上尝试我的代码:

代码:

const{join}=require('path');
const{readFileSync}=require('fs');
const jws=require('jws');
常数ALG='PS256';
/**********
*签字
**********/
const PRIVATE_KEY_PATH=join(_dirname,'./keys/PRIVATE_key2.pem');
const privateKey=readFileSync(PRIVATE_KEY_PATH).toString();
常数有效载荷={
福:“酒吧”,
};
const token=jws.sign({
标题:{alg:alg},
有效载荷,
私钥,
})
log('Token:');
console.log(令牌);
/************
*验证
************/
const PUBLIC_KEY_PATH=join(_dirname,'./keys/PUBLIC_key2.pem');
const publicKey=readFileSync(PUBLIC_KEY_PATH).toString();
const result=jws.verify(令牌、ALG、公钥);
如果(结果){
log('验证成功');
}否则{
控制台。错误('验证失败');
}
私钥:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDPR8CD/9V9fddR
vMk590JtuU4hPT9iPD/mYeWdvUTbkN2iPpg6LDADBntz8I9CzThCkgHmDQhh49Qz
AONiHfyHhKT6HHIBS78wGWfhE9ueFtkv19xisvFJTDO6IllGFMiioj8AkvOJwaY+
5ZKSFG32V0gMaglNSNTOh5KK6DsxgdH2KfMzn6uFwJkvsz1qwPiINu/rqvOQPOIK
JCbNHBOg/SvhPWBSEFDC9AkLm3ajhGAcnSlWi0KgUFz7iHuUR6s4GLdkc40uAooY
ExEWsZyoByT18tXln2hPAvE1Ata2PSbtLHuwvMQt4vzZi80K4BXqOiqvNMo1A1aT
oSQnmOwtAgMBAAECggEAPpHTPEVS5aHCCItrVtMbu1FvkzsQ0g+L3nh4vqfujDTr
olkwzIagK5meVH4uUKTwMbAvYIlYmWwTlx3ShcC1hRb2UgWaKGf8G4HfyKKc7djJ
0NZhUW3gxhZ5mttZhX0qn2VIjVzOpSvOijf0iaIfG3h3aD/t9OViT8G+6610iNmz
Oygmi9kQaBAS2A2sLSSMhdyddIPEpZ8QOHwGCRvBXWO100BCV9ROQzYxW+U9VPaJ
I0tXDL1L1H7y1EbxccPfOsfUPMtF9LQWQZ6ksJuSRwkBAnfKpzexguph29sLDjCQ
X23rQN/NwiU+zRmn+cW7VqkZsbSqucP9t+d19UdWpQKBgQDn9sThxAZvx4OS0noD
AWJX5CliDNlagmLqr4c0QoYI+fPL7FcK9tQYUZ869jnebX7UPHTuDhMoIvWknZbB
QhoogpRoX+XFtxzPwjtBBGc5TYacYnOR4xPSjvDlIrY7FQiH8TgpAGzenSBiD8O0
xW4zSaHLUDHEMFEyPq8tdMmBewKBgQDkwjUnVMPlA9AOD+KQNXgf2kV9z0ZA5idt
9WcsXsxpO2W6S0ntkr29Yr3VuuuJTRH7Fm+bPDJ6C1bfZ746hn3iLMZbMxgGVEf/
cN0nNXjfG5G7EEIU9WFges1I5rec/5W38kIco6soP36Qj5HcUBXt6AHy3k1IbEL2
84Bp1SZ0dwKBgF19mhCcXzPCKAePCVoYvrhJ31wDbb8K+i84m7e2cCtCAr7X/KUQ
op9Clni/MMezPgDwdPhVd+cfX/3+/fnaWIynRIVk0UkE6nnaAOPNkIUJ+A0jqQzN
hvnAXtsbSHM7oPqZgFcWMsrubVTYobpEMIw/SxSUt9oo1zD3Dse1YFntAoGBAIAL
AIuKU7f9gVhNpehINXvGxfzcpxsueEWBBgX87fe9CnzTJYc4CsJV4aIfZTVOEVF0
xnWipTJQ5IhZ3k2N+CpAG6ryl3D7fe1J9E+9C3H+UXzeZc6rZp0FP6Cdm4riOKBk
loLHTcdSevpZkjA6F3w5z9Vsft+Z0YW+2FLkvwiTAoGAdjUYcGTaEhGNtHQszAeY
2VbeVHwgnajKhaZpKMNTVp/AFgeS5k1lSATlT5wQHD3OAhUn+NAEwUOUBBWOpg+i
jML8loplEcVmdHkfGFsrIvzFFIIXQOWy77s/McTCh2jLkLYO8kIOrGy08JBiZnQ/
Ki/HFS/2yaUbG6UdH8FFp2g=
-----END PRIVATE KEY-----
公钥:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz0fAg//VfX3XUbzJOfdC
bblOIT0/Yjw/5mHlnb1E25Ddoj6YOiwwAwZ7c/CPQs04QpIB5g0IYePUMwDjYh38
h4Sk+hxyAUu/MBln4RPbnhbZL9fcYrLxSUwzuiJZRhTIoqI/AJLzicGmPuWSkhRt
9ldIDGoJTUjUzoeSiug7MYHR9inzM5+rhcCZL7M9asD4iDbv66rzkDziCiQmzRwT
oP0r4T1gUhBQwvQJC5t2o4RgHJ0pVotCoFBc+4h7lEerOBi3ZHONLgKKGBMRFrGc
qAck9fLV5Z9oTwLxNQLWtj0m7Sx7sLzELeL82YvNCuAV6joqrzTKNQNWk6EkJ5js
LQIDAQAB
-----END PUBLIC KEY-----
编辑:关于如何复制我的问题的澄清

  • 使用以下命令运行我的脚本:
    npminit-f&&npm install jws&&node test.js
  • 脚本将输出令牌并
    验证成功。
  • 将令牌复制并粘贴到jwt.io上的“Encoded”字段中
  • 在“公钥或证书”字段中复制并粘贴公钥
  • 底部会出现一条红色的“无效签名”消息
  • 下面是我的脚本将生成的令牌的示例。请记住,PS256具有概率签名而不是确定性签名,因此每次运行脚本时签名都会不同

    eyJhbGciOiJQUzI1NiJ9.eyJmb28iOiJiYXIifQ.Rn6i-94ovuKOVRc2jzLVS40MpMmBkIfkyvF56JK3tM8wvg-DW943NNbXf01bhRdyoUj0A73NSQtz0kB4WfXN1uAH1omzNr0ww-iTfC23AX0OcjbsE7CcDz_ZQWWOzwEGGFVfV9ez5yn1pKRYVdFaKqApk3irP-ej_WGrrJfgeZVs683lNk0WjKOYhj6vsryuz52c0OEJ0UmYy7hSSfL38jgL6bdE0awg2DgiaU6qszZEkMjSnugoMobeAUUyOiXHsR79NryuhCQko-I9P1vKd1dEA3zM1iut5sW5FwB8K9Fi49gaQy0zHk72txJvUWdxW5ns0Svft3qLke5XMuqm2g
    

    确保正确复制密钥

    要求您复制标签,包括
    开始
    结束
    标签行

    -----开始公钥-----

    -----结束公钥-----


    我试图将您的令牌、公钥和私钥复制并粘贴到jwt.io的调试器中。以下是我的发现:

  • 如果您只粘贴令牌,令牌将被正确解码,但签名无法验证(这是显而易见的)

  • 如果随后粘贴公钥(该公钥应足以验证签名),签名仍然无法验证。这很奇怪,请不要将此问题标记为重复问题。它的独特之处在于它是针对PS256算法的。因此,您阅读了可能重复的问题和答案,对吗?!但是你没有告诉我们,你在jwt.io上到底做了什么,因为在大多数情况下,人们只是忘记在jwt.io上上传密钥。如果你能确切地告诉我们你在那里做了什么,那就容易多了。是的,我确实仔细检查了潜在的重复项,没有一项与我的问题相符。我复制了我的令牌并将其粘贴到jwt.io上。我还将公钥粘贴到jwt.io的相应字段中。我将更新问题的文本以反映这一点。任何人都可以复制我所做的。然后请在问题中显示您的令牌,以便人们可以尝试。好的,我会这样做。我按照您的建议做了,但这并没有解决我的问题。@kYuZz这可能是因为您令牌的签名错误。。。检查我的屏幕截图并将其与您的令牌进行比较,您会发现签名是不同的。PS256算法输出概率签名,即每次您对同一负载进行签名时,它都会创建不同的签名。这就是为什么我们的签名不同。我相信我的问题与
    jws
    包中的一个bug有关。请参阅:@Sohail如果只粘贴公钥(而不是私钥),则会显示签名无效。请记住,验证令牌只需要公钥。实际上,jwt.io是开源的。它的存储库是。JWT验证码为;它似乎只是
    节点jose
    的一个包装器。很好。我将尝试在本地运行它,看看是否可以找到任何问题。