Rag*_* SK 5 javascript node.js jwt
我尝试使用nodejs中的包使用密钥对数据进行编码jsonwebtoken,并收到以下错误:
我用来使用密钥和算法对数据进行编码的代码如下:
var data = {
sub: "1234567890",
name: "John Doe"
};
var secretKey = "secret123";
var algorithm = { algorithm: "RS384" };
getJWTToken(data, secretKey, algorithm);
let getJWTToken = function(data, secretKey, algorithm) {
console.log(token: jsonwebtoken.sign(data, secretKey, algorithm));
};
Run Code Online (Sandbox Code Playgroud)
看来问题出在算法上。当我使用该算法时HS256,HS384它HS512工作正常,但是当我使用该算法时RS256,RS384我RS512收到此错误。
谁能帮我解决这个问题?
对于 RSA 算法,您需要提供PEM 格式的RSA私钥来签署令牌,并提供 RSA 公钥来验证它。您不能像 HSxxx 算法那样只传递一个简单的字符串。
您可以使用在线工具或 openssl生成公钥/私钥对,如该链接或下面所述。
然后读取密钥并签署令牌,如下所示(示例取自文档):
// sign with RSA SHA256
var privateKey = fs.readFileSync('private.key');
var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256' });
Run Code Online (Sandbox Code Playgroud)
并用公钥验证:
// verify a token asymmetric
var cert = fs.readFileSync('public.pem'); // get public key
jwt.verify(token, cert, function(err, decoded) {
console.log(decoded.foo) // bar
});
Run Code Online (Sandbox Code Playgroud)
对于 ESxxx 和 PSxxx 算法,它与 RSxxx 算法基本相同。据此,您可以为 RSxxx 和 Psxxx 算法生成并使用相同的密钥对,如下所示:
openssl genrsa 2048 -out rsa-2048bit-key-pair.pem
Run Code Online (Sandbox Code Playgroud)
对于 ES256,密钥对是不同的,生成方式如下:
openssl ecparam -genkey -name prime256v1 -noout -out ec256-key-pair.pem
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5144 次 |
| 最近记录: |