Подпись токена JWT с использованием ключа pem, преобразованного из ключа .p12 учетной записи службы Google

Здесь я пытаюсь подписать токен 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: нет начальной строки. Было бы здорово, если бы кто-нибудь мог помочь указать, где я сделал не так, или подсказать общее направление, в котором я могу разобраться, спасибо!


person jlyh    schedule 14.04.2018    source источник
comment
Ах ... это неловко ... Я передал неправильную переменную в свою функцию jwt.sign .. const privateKey = fs.readFileSync (private_key_file); return jwt.sign (токен, privateKey, {алгоритм: алгоритм});   -  person jlyh    schedule 14.04.2018


Ответы (1)


Сделал глупую ошибку в моем коде, он должен быть следующим, и теперь токен успешно возвращается.

   const privateKey = fs.readFileSync(private_key_file);
   return jwt.sign(token, **privateKey**, { algorithm: algorithm });
person jlyh    schedule 14.04.2018
comment
Спасибо за ответ на свой вопрос. Это было полезно. - person jrue; 23.01.2019