Я пытаюсь добавить группы в свой аккаунт Google Apps для бизнеса. Я создал учетную запись службы и дал ей роль администратора каталога служб. Теперь я хочу проверить это на моем локальном компьютере (я использую RubyMine для запуска через Rspe c). Тесты выглядят так:
require 'rails_helper'
describe GoogleApiHelper, type: :helper do
it 'should authenticate successfully to Google' do
google_auth_creds = OpenStruct.new authenticate(Api::Application.config.google[:auth][:scopes])
expect(google_auth_creds).to_not be_nil
expect(google_auth_creds.access_token).to match(/[A-Za-z\._-]*/)
puts(google_auth_creds)
end
it 'should list all of the groups in the sinkingmoon.com domain' do
groups = OpenStruct.new list_groups 'mydomain.com'
puts(groups)
end
end
Тестируемая реализация выглядит так:
require 'googleauth'
require 'google/apis/admin_directory_v1'
module GoogleApiHelper
def authenticate(scopes)
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: File.open(Api::Application.config.google[:auth][:json_file]),
scope: scopes)
authorizer.fetch_access_token!
end
def retrieve_group(domain, groupId)
authorizer = authenticate(Api::Application.config.google[:scopes])
directory_service = Google::Apis::AdminDirectoryV1::DirectoryService.new
directory_service.authorization = authorizer
directory_service.get_group groupId
end
def list_groups(domain)
authorizer = authenticate(Api::Application.config.google[:scopes])
directory_service = Google::Apis::AdminDirectoryV1::DirectoryService.new
directory_service.authorization = authorizer
directory_service.list_groups(domain: domain)
end
end
Тест на аутентификацию работает так, как я ожидал, в том смысле, что он дает мне токен авторизации и истечение срока. Однако тест на перечисление групп не проходит и появляется следующее сообщение:
Google::Apis::AuthorizationError: Unauthorized
0) GoogleApiHelper should retrieve a group by the domain
Failure/Error: directory_service.get_group groupId
Google::Apis::AuthorizationError:
Unauthorized
Я не совсем уверен, что делаю неправильно. Мои учетные данные хранятся в файле. json, а конфигурация настраивается в файле environment / test.rb:
Api::Application.config.google = {
:auth => {
:json_file => 'config/auth/credentials.json',
:scopes => [ 'https://www.googleapis.com/auth/admin.directory.group', 'https://www.googleapis.com/auth/admin.directory.domain' ]
},
:group => 'mygroup@mydomain.com'
}
Мне интересно, возможно, я действительно неправильно настроил области для этой учетной записи службы. В качестве альтернативы, может быть, я пытаюсь получить доступ к API со своего локального компьютера, а не с моего сервера в зарегистрированном домене? В последнем случае, как я могу go протестировать это перед развертыванием в моем производственном или промежуточном веб-приложении?
Обновление Я распечатал области, которые использует приложение, которые являются: ["https://www.googleapis.com/auth/admin.directory.group", "https://www.googleapis.com/auth/admin.directory.domain"]
. Я считаю, что это правильные. Я добавил их в консоль администратора в разделе «Безопасность» -> «Дополнительные настройки» -> «Управление клиентским доступом к API» и ввел имя моей учетной записи службы, которое выглядит примерно как test-account@myprojectname.iam.gserviceaccount.com
, и указанные выше области. Это преобразуется в уникальный идентификатор учетной записи службы.