Получена ошибка "Не авторизован для доступа к этому ресурсу / API" при попытке использовать Google Directory API и аутентификацию учетной записи службы

Я действительно пытаюсь использовать аутентификацию служебной учетной записи, чтобы использовать Google Directory API (Admin SDK).

При использовании трехстороннего OAuth на основе клиента это работает (проверено здесь - https://developers.google.com/admin-sdk/directory/v1/reference/members/insert), но есть проблема с делегированием разрешений для учетной записи службы. с помощью. В рамках администрирования Служб Google я включил использование API и добавил служебную учетную запись в список разрешенных клиентов OAuth в соответствии с инструкциями.

Вот код:

import httplib2
import sys

from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

credentials = SignedJwtAssertionCredentials(
    '<KEY>@developer.gserviceaccount.com',
    '<KEY DATA>',
    scope='https://www.googleapis.com/auth/apps.groups.settings https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.group.member'
)
http = httplib2.Http()
http = credentials.authorize(http)

service = build("admin", "directory_v1", http=http)
groups = service.groups()
g = groups.get(groupKey="<GROUP NAME>").execute()

В конце концов я получаю следующую ошибку:

apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/admin/directory/v1/groups/<GROUP NAME>?alt=json returned "Not Authorized to access this resource/api">

Я также попытался использовать следующий API:

service = build("groupssettings", "v1", http=http)

Но это также возвращает ошибку - "Ошибка сервера".

1 ответ

Решение

Даже если вы используете учетную запись службы, вам все равно нужно действовать от имени пользователя Служб Google в том случае, если у вас есть соответствующие права администратора. Попробуйте сделать:

credentials = SignedJwtAssertionCredentials(
  '<KEY>@developer.gserviceaccount.com',
  '<KEY DATA>',
  scope='https://www.googleapis.com/auth/apps.groups.settings https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.group.member',
  sub='super-admin@yourdomain.com'
)

где super-admin@yourdomain.com - это супер-администратор в вашем аккаунте Служб Google.

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