![](/img/trans.png)
[英]nodejs jsonwebtoken with PEM file: error “PEM_read_bio:no start line”
[英]Encoding the data to JWT token with NodeJS getting error PEM routines:PEM_read_bio:no start line
我嘗試在 nodejs 中使用jsonwebtoken
package 使用密鑰對數據進行編碼,但出現以下錯誤:
下面提到了我用來使用密鑰和算法對數據進行編碼的代碼:
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));
};
看來問題是算法。 當我使用算法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' });
並使用公鑰驗證:
// 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
});
對於 ESxxx 和 PSxxx 算法,它與 RSxxx 算法基本相同。 根據這個,您可以為 RSxxx 和 Psxxx 算法生成和使用相同的密鑰對,如下所示:
openssl genrsa 2048 -out rsa-2048bit-key-pair.pem
對於 ES256,密鑰對不同,生成方式如下:
openssl ecparam -genkey -name prime256v1 -noout -out ec256-key-pair.pem
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.