Ошибка неавторизованного клиента при использовании делегирования всего домена с Google API - PullRequest
4 голосов
/ 11 апреля 2019

Мы используем Google API Ruby-клиент с делегированием по всему домену, чтобы обновлять контакты пользователей, анализировать электронные письма, связывать их с нашей БД и т. Д. До 1 апреля все работало просто отлично, однако с тех пор мы получаем unauthorized_client сообщение об ошибке.

Signet::AuthorizationError (Authorization failed.  Server message:)
{
  "error": "unauthorized_client",
  "error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested."
}

Что я уже пробовал?

Я пытался обновить гемы google-api-ruby-client и googleauth до последней версии.Ничего не изменилось.

Я также попытался (дважды) создать новую учетную запись службы, включив ее для DWD и добавив необходимую область в консоли администратора G Suite с идентификатором клиента учетной записи службы.Я ждал 24 часа после добавления областей в консоли администратора, и ничего не изменилось.

Обратите внимание, что в прошлом все работало нормально с теми же настройками.

Минимальный код для теста

Вот минимальный код, который выдает ошибку.

require 'googleauth'
require 'google/apis/gmail_v1'

creds = ENV['GOOGLE_SERVICE_ACCOUNT'] # JSON downloaded from cloud console
                                      # is saved in this ENV variable
creds_json = JSON.parse(creds)
creds_json_io = StringIO.new(creds_json.to_json)
auth = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: creds_json_io,
  scope: [Google::Apis::GmailV1::AUTH_GMAIL_MODIFY]
)
auth.sub = 'admin@slideslive.com' # without this line everything works fine
                                  # and I get the access token
auth.fetch_access_token

Насколько я могу судить, мы делаем все в соответствии с доступной документацией.У кого-нибудь есть предложения, пожалуйста?

Обновление

Я также пытался создать новый проект Google Cloud Platform в той же организации с добавлением только учетной записи службы, но все осталось прежним.

1 Ответ

1 голос
/ 11 апреля 2019

Итак, я наконец выяснил, где проблема. Среди других областей я также включил эти:

http://www.google.com/m8/feeds/contacts/ 
http://www.google.com/m8/feeds/groups/ 

Оказывается, Google, вероятно, лишил их законной силы, и теперь они требуют https вместо http.

Было бы неплохо, если бы они предоставили более качественное сообщение об ошибке, что-то подобное введенным областям действия недопустимо при их авторизации в консоли администратора Google.

Я обнаружил ошибку при попытке авторизации обычного идентификатора клиента OAuth2 для тех же областей, которые я использовал для учетной записи службы. На экране согласия OAuth2 отображается правильное сообщение об ошибке.

Обновление

Вот контрольный список, который я создал для устранения ошибок учетных записей служб:

  1. Проверьте, включено ли делегирование домена для учетной записи службы в Google Cloud Console.
  2. Убедитесь, что вы ввели надлежащие области в консоли администратора Google с идентификатором клиента учетной записи службы (не ее адрес электронной почты!). Убедитесь, что все области действительны! Они могут стать недействительными при жизни. При вводе неверной области вы получаете ошибку unauthorized_client при получении токена доступа даже для действительной области.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...