簡體   English   中英

使用 NodeJS 將數據編碼為 JWT 令牌獲取錯誤 PEM 例程:PEM_read_bio:沒有起始行

[英]Encoding the data to JWT token with NodeJS getting error PEM routines:PEM_read_bio:no start line

我嘗試在 nodejs 中使用jsonwebtoken package 使用密鑰對數據進行編碼,但出現以下錯誤:

錯誤:0906D06C:PEM 例程:PEM_read_bio:無起始行編碼時出錯

下面提到了我用來使用密鑰和算法對數據進行編碼的代碼:

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));  
};

看來問題是算法。 當我使用算法HS256HS384HS512時它工作正常但是當我使用算法RS256RS384RS512時出現此錯誤。

誰能幫我解決這個問題?

對於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM