Ошибка аутентификации с помощью JWT и googleapis (ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет начальной строки) - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь подключиться к Google Analytics Reporting API v4 с моего Node-сервера (работает как облачная функция Firebase). Я хочу аутентифицироваться с использованием JWT, в соответствии с этим примером: http://nali.org/google-analytics-v4-api-node-js-starter-example/

Однако я получаю эту ошибку:

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Error (native)
    at Sign.sign (crypto.js:307:26)
    at Object.sign (/user_code/node_modules/googleapis/node_modules/jwa/index.js:76:45)
    at Object.jwsSign [as sign] (/user_code/node_modules/googleapis/node_modules/jws/lib/sign-stream.js:32:24)

Кажется, что он пытается использовать файл PEM, но я просто хочу использовать электронную почту и закрытый ключ. Это не возможно? Ссылка на пример, которую я дал, вводит в заблуждение?

Вот мой код:

const email = functions.config().ga.email;
const privateKey = functions.config().ga.privatekey;
const scope = ['https://www.googleapis.com/auth/analytics.readonly'];
const token = new googleapis.google.auth.JWT(email, null, privateKey, scope, null);

token.authorize( (error, tokens) => {
  if (error) {
    console.error('Error connecting to GA:', error);
  } else {
    console.log('Authorized!', tokens);
  }
})

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 27 августа 2018

Ошибка новичка: я не избежал \n в моей строке privateKey. firebase functions:config:set конвертировал \n в \\n Фиксированный код выглядит так:

const email = functions.config().ga.email;
const privateKey = _.replace(functions.config().ga.privatekey, /\\n/g, '\n');
const scope = ['https://www.googleapis.com/auth/analytics.readonly'];
const jsonWebToken = new googleapis.google.auth.JWT(email, null, privateKey, scope, null);

jsonWebToken.authorize( (error, tokens) => {
  if (error) {
    console.error('Error connecting to GA:', error);
  } else {
    console.log('Authorized!', tokens);
  }
});

Моя настоящая проблема была решена с помощью этого совета: Экранирование проблемы с firebase privateKey в качестве переменной конфигурации Heroku

...