Там, где я работаю, мы используем Google Apps for Work. В течение последних 9 месяцев мы использовали Gmail API (~ 2000 запросов в день), чтобы получать новые электронные письма для наших учетных записей электронной почты службы поддержки.
Вот как мы его изначально настроили:
- Перейдите на страницу https://console.developers.google.com/project/.
- Нажмите на проект (или создайте новый)
- Нажмите на API и аутентификацию
- Нажмите на учетные данные
- Нажмите «Создать новый идентификатор клиента».
- Нажмите на учетную запись службы
- Загрузите JWT (json) для учетной записи.
- Следуйте краткому руководству node.js с токеном установленного/собственного типа для того же учетную запись и авторизовать ее через консоль. Токены JWT не работали, если мы не сделали этот шаг, один раз для каждой учетной записи.
Мы сделали это для каждой из наших отдельных учетных записей электронной почты службы поддержки, чтобы избежать необходимости включать делегирование на уровне домена для любой из них в консоли администратора. Затем мы смогли пройти аутентификацию с помощью токенов, используя официально поддерживаемую npm
библиотеку googleapis
, примерно так:
var google = require('googleapis');
var jwtClient = new google.auth.JWT(
token.client_email,
null,
token.private_key,
['https://www.googleapis.com/auth/gmail.readonly'],
'[email protected]'
);
jwtClient.authorize(function(err, tokens) {
if (err) {
return cb(err);
}
var gmail = google.gmail('v1');
var requestOptions = {
auth: jwtClient,
userId: 'me',
id: messageId,
format: 'raw'
};
gmail.users.messages.get(requestOptions, function(err, response) {
if (err) {
return cb(err);
}
// do stuff with the response
});
});
Как я уже сказал, мы использовали это в течение длительного времени и никогда не было никаких проблем. Вчера около 10:00 по московскому времени все учетные записи перестали проходить аутентификацию в одно и то же время, и jwtClient.authorize()
внезапно вернула ошибку [Error: unauthorized_client]
.
Я попытался сделать то же самое с новым токеном в новой учетной записи службы (веб-интерфейс для получения токена сильно изменился за последние 9 месяцев), и он возвращает ту же ошибку.
Версия googleapis
, которую мы использовали, была 0.9.7
, но мы также не можем заставить аутентификацию JWT работать в новейшей версии.
Мы создали тикет со службой поддержки Google API, но сотрудник службы поддержки, с которым мы говорили, никогда раньше не читал спецификации Gmail API и в конечном итоге не смог нам помочь, поэтому он перенаправил нас сюда, чтобы связаться с команда инженерной поддержки API.
Мы заметили, что аутентификация работает, если мы включаем область делегирования на уровне домена в консоли администратора, но мы бы предпочли этого не делать. Нам не нужно олицетворять учетные записи, и мы предпочли бы использовать отдельный JWT для каждой учетной записи.
A token might stop working for one of these reasons: The token has not been used for six months
. Может ли это быть? - person Tholle   schedule 11.03.2016