Здесь я пытаюсь подписать токен JWT для доступа к API Google из внешнего интерфейса. Я создал учетную запись службы, загрузил ключ p12 и преобразовал его в ключ pem с помощью следующей команды
openssl pkcs12 -in privatekey.p12 -nodes -nocerts --passin pass:notasecret > privateKey.pem
Затем я использовал пакет npm jsonwebtoken, чтобы вернуть токен, используя следующий код, который работает для моего кода на стороне сервера.
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));
Однако я продолжаю сталкиваться с ошибкой: Ошибка: ошибка: 0906D06C: Подпрограммы PEM: PEM_read_bio: нет начальной строки. Я знаю, что это означает, что файл 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, сообщение об ошибке по-прежнему возвращает Error: error: 0906D06C: Подпрограммы PEM: PEM_read_bio: нет начальной строки. Было бы здорово, если бы кто-нибудь мог помочь указать, где я сделал не так, или подсказать общее направление, в котором я могу разобраться, спасибо!