Google отклоняет JWT — NodeJS

#node.js #google-api #json-web-token

#node.js #google-api #json-web-token

Вопрос:

Дело в том, что я хочу периодически (два раза в неделю) запрашивать у Google обзоры приложений в учетной записи разработчика Google.

Я хочу автоматически сохранять их в базе данных, которая у меня есть на сервере NodeJS, и что я делаю, это делаю запрос HTTPS в Google, следуя их инструкциям из документов Google OAuth2.0.

Я всегда получаю этот ответ, токен, похоже, плохо подписан (я что-то путаю с подписью, но не знаю, что):

 {

    "error": "invalid_grant",
    "error_description": "Invalid JWT Signature.",
    "error_uri": ""

}
  

Что я делаю

Я использую плагин jsonwebtoken, найденный здесь, в GitHub. Затем я подписываю его с помощью:

 let signed = jwt.sign( payload, secure.getPrivateKey(), { algorithm: 'RS256'} );
  

И, наконец, я добавляю подпись в конце полезной нагрузки, что приводит к чему-то похожему на:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJvYmZ1c2NhdGVkIGZvciBvYmlvdXMgcmVhc29ucyA6KSIsInNjb3BlIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9kZXZzdG9yYWdlLnJlYWRvbmx5IiwiYXVkIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3Y0L3Rva2VuIiwiZXhwIjoxNDc2ODkxMjU5LCJpYXQiOjE0NzY4ODc2NTl9

Вы можете оформить заказJWT.io здесь, чтобы увидеть состав полезной нагрузки.

Данные

Все поля извлекаются из ключей.json файл, который Google предоставил мне из консоли разработчика, когда я создавал проект несколько дней назад.

Поле iss берется из поля «client_email», которое заканчивается на .iam.gserviceaccount.com

Secure.getPrivateKey() получает информацию из поля «private_key».

Так что, если у кого-нибудь есть опыт работы с Google OAuth с использованием аутентификации от сервера к серверу, дайте мне знать. Спасибо!

Комментарии:

1. Вероятно, это не причина, но когда вы говорите, что это приводит к чему-то подобному , вы имеете в виду, что отправляемый вами токен на самом деле будет иметь компонент подписи, верно? В примере токена, который вы добавили, есть только заголовок и полезная нагрузка, вот почему я спрашиваю.

2. Точно! Я не опубликовал подпись, и поле «iss» запутано. Итак, у вас здесь только заголовок и полезная нагрузка, но я отправляю все вместе в Google