#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