使用从 Google 服务帐户 .p12 密钥转换而来的 pem 密钥签署 JWT 令牌
Signing JWT token using pem key converted from Google service account .p12 key
我在这里尝试为 google 的 API 从前端访问签署一个 JWT 令牌。我创建了一个服务帐户,下载了 p12 密钥并使用以下命令将其转换为 pem 密钥
openssl pkcs12 -in privatekey.p12 -nodes -nocerts --passin pass:notasecret > privateKey.pem
然后我使用 npm 包 jsonwebtoken return 使用以下适用于我的服务器端代码的代码的令牌。
var fs = require('fs');
var jwt = require('jsonwebtoken');
const private_key_file = 'privateKey.pem';
const algorithm = 'RS256';
const projectId = [PROJECT_ID];
function createJwt (projectId, private_key_file, algorithm) {
// Create a JWT to authenticate this device. The device will be disconnected
// after the token expires, and will have to reconnect with a new token. The
// audience field should always be set to the GCP project id.
const token = {
'iat': parseInt(Date.now() / 1000),
'exp': parseInt(Date.now() / 1000) + 1000,
'aud': projectId
};
const privateKey = fs.readFileSync(private_key_file);
return jwt.sign(token, private_key_file, { algorithm: algorithm });
};
console.log(createJwt(projectId, private_key_file, algorithm));
但是,我一直在运行ning 中出错,即Error: error:0906D06C:PEM routines:PEM_read_bio:no 起始行。我知道这意味着未正确检测到 pem 文件。我进去检查了一些前体行,例如
Bag Attributes
friendlyName: privateKey
localKeyID: xx xx xx ...
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
....
....
-----END PRIVATE KEY-----
在删除它以仅显示 BEGIN 到 END PRIVATE KEY 之前和之后,我还使用以下命令检查它是否正确加载了密钥文件。
openssl rsa -text -noout -in privateKey.pem
但即便如此,当我使用节点 运行 JWT 签名代码时,错误消息仍然是 returns 错误:error:0906D06C:PEM routines:PEM_read_bio:no 起始行。如果有人可以帮助指出我做错的地方或建议我可以研究的总体方向,那就太好了,谢谢!
在我的代码中犯了一个愚蠢的错误,应该是下面的,现在令牌已成功返回。
const privateKey = fs.readFileSync(private_key_file);
return jwt.sign(token, **privateKey**, { algorithm: algorithm });
我在这里尝试为 google 的 API 从前端访问签署一个 JWT 令牌。我创建了一个服务帐户,下载了 p12 密钥并使用以下命令将其转换为 pem 密钥
openssl pkcs12 -in privatekey.p12 -nodes -nocerts --passin pass:notasecret > privateKey.pem
然后我使用 npm 包 jsonwebtoken return 使用以下适用于我的服务器端代码的代码的令牌。
var fs = require('fs');
var jwt = require('jsonwebtoken');
const private_key_file = 'privateKey.pem';
const algorithm = 'RS256';
const projectId = [PROJECT_ID];
function createJwt (projectId, private_key_file, algorithm) {
// Create a JWT to authenticate this device. The device will be disconnected
// after the token expires, and will have to reconnect with a new token. The
// audience field should always be set to the GCP project id.
const token = {
'iat': parseInt(Date.now() / 1000),
'exp': parseInt(Date.now() / 1000) + 1000,
'aud': projectId
};
const privateKey = fs.readFileSync(private_key_file);
return jwt.sign(token, private_key_file, { algorithm: algorithm });
};
console.log(createJwt(projectId, private_key_file, algorithm));
但是,我一直在运行ning 中出错,即Error: error:0906D06C:PEM routines:PEM_read_bio:no 起始行。我知道这意味着未正确检测到 pem 文件。我进去检查了一些前体行,例如
Bag Attributes
friendlyName: privateKey
localKeyID: xx xx xx ...
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
....
....
-----END PRIVATE KEY-----
在删除它以仅显示 BEGIN 到 END PRIVATE KEY 之前和之后,我还使用以下命令检查它是否正确加载了密钥文件。
openssl rsa -text -noout -in privateKey.pem
但即便如此,当我使用节点 运行 JWT 签名代码时,错误消息仍然是 returns 错误:error:0906D06C:PEM routines:PEM_read_bio:no 起始行。如果有人可以帮助指出我做错的地方或建议我可以研究的总体方向,那就太好了,谢谢!
在我的代码中犯了一个愚蠢的错误,应该是下面的,现在令牌已成功返回。
const privateKey = fs.readFileSync(private_key_file);
return jwt.sign(token, **privateKey**, { algorithm: algorithm });