Node.js:签名验证(PS256)在Node.js中成功,但在jwt.io调试器中失败
我编写了一个测试脚本,用它签名,然后用PS256算法验证JWT 我的代码成功地验证了JWT,但在调试器中验证失败 我正在使用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
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
验证成功。
eyJhbGciOiJQUzI1NiJ9.eyJmb28iOiJiYXIifQ.Rn6i-94ovuKOVRc2jzLVS40MpMmBkIfkyvF56JK3tM8wvg-DW943NNbXf01bhRdyoUj0A73NSQtz0kB4WfXN1uAH1omzNr0ww-iTfC23AX0OcjbsE7CcDz_ZQWWOzwEGGFVfV9ez5yn1pKRYVdFaKqApk3irP-ej_WGrrJfgeZVs683lNk0WjKOYhj6vsryuz52c0OEJ0UmYy7hSSfL38jgL6bdE0awg2DgiaU6qszZEkMjSnugoMobeAUUyOiXHsR79NryuhCQko-I9P1vKd1dEA3zM1iut5sW5FwB8K9Fi49gaQy0zHk72txJvUWdxW5ns0Svft3qLke5XMuqm2g
确保正确复制密钥 要求您复制标签,包括
开始
和结束
标签行
-----开始公钥-----
-----结束公钥-----
我试图将您的令牌、公钥和私钥复制并粘贴到jwt.io的调试器中。以下是我的发现:
jws
包中的一个bug有关。请参阅:@Sohail如果只粘贴公钥(而不是私钥),则会显示签名无效。请记住,验证令牌只需要公钥。实际上,jwt.io是开源的。它的存储库是。JWT验证码为;它似乎只是节点jose
的一个包装器。很好。我将尝试在本地运行它,看看是否可以找到任何问题。