Как отладить конфигурацию аутентификации? - PullRequest
0 голосов
/ 05 декабря 2018

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

Наш процесс:

  1. Создание SA (= служебной учетной записи) с включенным делегированием по всему домену.
  2. Аутентификация SA в консоли администратора GSuite (https://support.google.com/a/answer/162106?hl=en).
    • использование client_id из файла учетных данных. (Теперь электронная почта)
    • Области разделяются запятыми без пробелов между ними.
  3. Убедитесь, что установлен флажок «Безопасность> Справочник по API> Справочник по API ->« Включить доступ к API ».

Для некоторых доменов GSuite это рабочая конфигурация, но у нас есть несколько доменов, в которых эта конфигурация приводит к:

google.auth.exceptions.RefreshError: ('unauthorized_client: клиент не авторизован для получения токенов доступа с помощью этого метода.', '{\ n"error": "unauthorized_client", \ n "error_description": "Клиент не авторизован для получения токенов доступа с помощью этого метода." \ n} ')

В нашем понимании это ошибка, говорящаяидентификатор клиентаи области не были добавлены на страницу «Управление доступом клиента API».(= Список аутентифицированных клиентов)

Мы действительно убедились, что запрашиваемый домен GSuite имеет правильный client_id и области, добавленные в список аутентифицированных клиентов +, имеет «Включенный доступ API».Мы даже создали Shared Desktop с ними и сделали это сами, чтобы быть полностью в этом уверенными.Но ошибка все еще сохраняется.

Однако мы не можем повторить эту проблему на нашем тестовом домене GSuite.Мы опробовали несколько вариантов, используя тот же SA, что и клиент:

  1. Олицетворенная учетная запись не имеет прав доступа к ресурсу.Этот результат приводит к:

googleapiclient.errors.HttpError: https://www.googleapis.com/admin/directory/v1/users?customer=my_customer&alt=json возвращено «Не авторизовано для доступа к этому ресурсу / api»>

Области являются лишь частичными:

google.auth.exceptions.RefreshError: ('access_denied: запрошенный клиент не авторизован.', '{\ N "error": "access_denied", \ n" error_description ":" Запрошенный клиент не авторизован. "\ n} ')

«Включенный доступ API» не проверен.

googleapiclient.errors.HttpError: https://www.googleapis.com/admin/directory/v1/users?customer=my_customer&alt=json возвращено «Домен не может использовать apis.»>

Ошибка, которую мы получаем от клиента («Клиент не авторизован для получения токенов доступа с помощью этого метода.»), Мы можем выполнить репликацию только в том случае, если client_id вообще не входит в список аутентифицированных клиентов.Но мы уверены, что проблемные домены GSuite имеют аутентификацию SA на странице «Управление клиентским доступом к API».

Мы используем следующие области: https://www.googleapis.com/auth/userinfo.profile,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/gmail.readonly,https://www.googleapis.com/auth/plus.login,https://www.googleapis.com/auth/calendar.readonly,https://www.googleapis.com/auth/contacts.readonly, https://www.googleapis.com/auth/admin.directory.user.readonly

Есть ли у вас какие-либоидеи как отладить / решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вот что вам нужно сделать.Дважды проверьте каждый шаг.Если сомневаетесь, начните сначала.

  1. Включить "Admin SDK API. Это включено для каждого проекта.
  2. Создайте учетную запись службы. Не добавляйте и не удаляйте никакие привилегии.Ни в коем случае не меняйте учетную запись службы. В противном случае вы получите сообщение об ошибке, что вы не авторизованы.
  3. Включение делегирования на уровне домена для учетной записи службы.
  4. Следуйте этому документучтобы делегировать полномочия на весь домен вашей учетной записи службы:

Передать полномочия на весь домен вашей учетной записи службы

При создании учетных данных учетной записи службы (из загруженного Json) вам понадобятся следующие области для полного управления G Suite:

"https://www.googleapis.com/auth/admin.directory.group"," https://www.googleapis.com/auth/admin.directory.user"

Олицетворение учетной записи пользователя, которая создает новые учетные данные.Учетная запись пользователя должна быть суперадмином G Suite.Эта учетная запись должна была войти в G Suite хотя бы один раз и принять Условия обслуживания .

Создайте своего клиента, используя учетные данные, начиная с шага № 5.

Рабочий Python Пример:

from googleapiclient.discovery import build
from google.oauth2 import service_account

# This is the service account credentials file
credentials_file = 'google-directory-api.json'

# In this example I only need to send email
credentials = service_account.Credentials.from_service_account_file(
                credentials_file,
                scopes=['https://www.googleapis.com/auth/gmail.send'])

# This user is a G Suite superadmin
impersonate = 'username@example.com'

credentials = credentials.with_subject(impersonate)

service = build('gmail', 'v1', credentials=credentials)
0 голосов
/ 05 декабря 2018

Я думаю, что нам нужно разбираться с этим поэтапно.Давайте начнем с вашей первой ошибки и посмотрим, исправит ли это вашу проблему.

Справочная информация

Существует несколько типов клиентов, которые можно создать в консоли разработчика Google.Вот три верхних.

  • Клиент браузера: используется для веб-приложений
  • Собственный клиент (другой): используется для установленных настольных приложений
  • Учетная запись службы: используется длямежсерверная связь.

Клиенты разные. Загружаемый вами файл client.json отличается, и код, используемый для аутентификации на сервере аутентификации, также отличается.

Ошибка 1: несоответствие кода / клиента

unauthorized_client: Клиент не авторизован для получения маркеров доступа с использованием этого метода.

Может означать одно из двух.Либо вы создали клиент учетной записи службы и не используете код учетной записи службы для проверки подлинности, либо вы используете код для проверки подлинности с помощью учетной записи службы, но вы не создали клиента учетной записи службы.Вы не опубликовали, какой язык вы используете или какой-либо код, поэтому я не могу сказать вам, предназначен ли код, который вы используете, для учетной записи службы.Вам нужно немного разобраться с этим.

Проверьте в консоли разработчика, убедитесь, что ваш клиент такой, если он проверяет ваш код.Если это не так, создайте клиент реальной учетной записи и повторите попытку.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...