Я выполнил все шаги по настройке делегирования полномочий для всего домена (https://developers.google.com/admin-sdk/reports/v1/guides/delegation) и следовал по этой ссылке тоже (https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority)), и в итоге я создал этот класс в Ruby.
class Gsuite::ServiceAccount
def initialize(person: nil)
end
def authorized_client
Google::Auth::ServiceAccountCredentials.make_creds(
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: StringIO.new(File.read AppConfig[:gsuite_service_account]
[:credentials_file]),
scope: AppConfig[:gsuite_service_account][:scope])
client = authorizer.fetch_access_token!
end
end
Этот класс возвращает мне этот хэш
{"access_token"=>"a_long_token_string_here", "expires_in"=>3600, "token_type"=>"Bearer"}
Затем я создал этот метод (в своем классе Admin) для подключения к службе Gmail
def gsuite_client_access
@client ||= Gsuite::ServiceAccount.new(person: self.email.to_s).authorized_client
authorized_client = Google::Apis::GmailV1::GmailService.new
authorized_client.authorization = @client
authorized_client
end
Поэтому, когда я пытаюсь перечислить свои сообщения Gmail с этой строкой в другой части кода
inbox = current_admin.gsuite_client_access.list_user_messages('me', max_results: 10)
, я получаю следующее сообщение об ошибке =>
Sending HTTP get https://www.googleapis.com/gmail/v1/users/me/messages?maxResults=10
401
#<Hurley::Response GET https://www.googleapis.com/gmail/v1/users/me/messages?maxResults=10 == 401 (238 bytes) 645ms>
Caught error Unauthorized
Error - #<Google::Apis::AuthorizationError: Unauthorized>
Retrying after authentication failure
Google::Apis::AuthorizationError: Unauthorized
Любые идеи, которых здесь не хватает