GroupssettingsService.get_group возвращает ошибку 401

Я пишу скрипт, который вызывает API групп Google для создания некоторых групп и установки их свойств. Я использую Google google-api-client драгоценный камень. Я могу создавать группы и добавлять в них членов с помощью API AdminDirectoryV1, но API GroupssettingsV1 всегда возвращают ошибки.

Вот код, с которым я тестировал. Шаги настройки - создание служб и авторизация пользователя - взяты из примеров быстрого запуска Google.

require 'google/apis/admin_directory_v1'
require 'google/apis/groupssettings_v1'
require 'googleauth'
require 'googleauth/stores/file_token_store'
require 'fileutils'

OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
APPLICATION_NAME = 'Test app'
CLIENT_SECRETS_PATH = 'client_secret.json'
DIRECTORY_CREDENTIALS_PATH = File.join(Dir.home, '.credentials', "testapp-admin-directory.yaml")
GROUPS_SETTINGS_CREDENTIALS_PATH = File.join(Dir.home, '.credentials', "testapp-groups-settings.yaml")

$directory_service = nil
$group_settings_service = nil

# This function is based on Google's quick-start samples.
def authorize(credentials_path, scope)
    FileUtils.mkdir_p(File.dirname(credentials_path))

    client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH)
    token_store = Google::Auth::Stores::FileTokenStore.new(file: credentials_path)
    authorizer = Google::Auth::UserAuthorizer.new(client_id, scope, token_store)
    user_id = 'default'
    credentials = authorizer.get_credentials(user_id)

    if credentials.nil?
        url = authorizer.get_authorization_url(base_url: OOB_URI)
        puts "Open this URL in a browser and enter the code you get after authorization."
        puts url
        code = $stdin.gets.strip

        credentials = authorizer.get_and_store_credentials_from_code(user_id: user_id, code: code, base_url: OOB_URI)
    end

    return credentials
end

# Create services. This succeeds.
$directory_service = Google::Apis::AdminDirectoryV1::DirectoryService.new
$directory_service.client_options.application_name = APPLICATION_NAME
$directory_service.authorization = authorize(DIRECTORY_CREDENTIALS_PATH, Google::Apis::AdminDirectoryV1::AUTH_ADMIN_DIRECTORY_GROUP)

$group_settings_service = Google::Apis::GroupssettingsV1::GroupssettingsService.new
$group_settings_service.client_options.application_name = APPLICATION_NAME
$group_settings_service.authorization = authorize(GROUPS_SETTINGS_CREDENTIALS_PATH, Google::Apis::GroupssettingsV1::AUTH_APPS_GROUPS_SETTINGS)

# Create a new group. This succeeds.
group = Google::Apis::AdminDirectoryV1::Group.new
group.email = "testgroup@example.com"
group.name = "Test group"
group.description = "A test group"

$directory_service.insert_group(group)

# Try to set one of the group's properties. The get_group call fails
# with an AuthorizationError exception.
group = $group_settings_service.get_group(email)
group.update!(allow_google_communication: false)
$group_settings_service.update_group(group)

Я застрял на get_group вызов. Это бросает AuthorizationError исключение, и один из заголовков в ответе:

WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=invalid_token

Драгоценный камень должен обрабатывать токены, поэтому я не знаю, как диагностировать эту ошибку. Я получаю ту же ошибку (401 Unauthorized), когда я использую страницу API Explorer, чтобы сделать этот вызов API.

Я пробовал несколько вещей при устранении неполадок:

  • Я проверил, что API-интерфейсы Groupssettings включены в консоли API.
  • Я сгенерировал много файлов client_secret.json.
  • Я попытался использовать файл client_secret.json, созданный супер-администратором домена.
  • Я был сделан супер-админом.
  • У меня были другие разработчики в компании (один супер-администратор, другой нет), пытаясь выполнить вызов get_group на странице проводника API.

Ни одна из этих вещей не сделала get_group вызов успешен.

У кого-нибудь есть идеи о том, что здесь не так? В сети так мало обсуждают эти API, что я в полном недоумении.

0 ответов

Другие вопросы по тегам