Проблемы с аутентификацией учетной записи службы для api реселлера Google с использованием библиотеки nodejs - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь получить доступ к api реселлера Google с помощью библиотеки nodejs, в которой очень много ..., я имею в виду нечеткую документацию. Я пробовал следовать примеру здесь , но не смог выполнить шаг 3 с этой ошибкой:

  code: 403,
  errors: [
    {
      domain: 'global',
      reason: 'insufficientPermissions',
      message: 'Authenticated user is not authorized to perform this action.'
    }
  ]

Моя конфигурация выглядит так:

    const OAUTH2_SCOPES = [
      "https://www.googleapis.com/auth/admin.directory.user",
      "https://www.googleapis.com/auth/apps.order",
      "https://www.googleapis.com/auth/siteverification",
      "https://www.googleapis.com/auth/cloud-platform",
    ];

   const authJWT = new google.auth.JWT({
      keyFile: JSON_PRIVATE_KEY_FILE,
      scopes: OAUTH2_SCOPES,
      subject: RESELLER_ADMIN_USER,
      email: "gsuite-reseller@some-cool-name-because-why-not.iam.gserviceaccount.com",
    });

Использование basi c google fu, я нашел эту ветку , в которой говорилось, что моя проблема связана с олицетворением. Таким образом, я обменял адрес электронной почты в свойстве subject на адрес электронной почты моей учетной записи, в котором указаны права владельца. Я также дал права владельца учетной записи службы, потому что на тот момент я был довольно невежественным. К сожалению, это только изменило сообщение об ошибке на:

status: 401,
statusText: 'Unauthorized'

Кто-нибудь знает, что пошло не так? 401 предполагает, что отсутствуют учетные данные. Придется ли мне также указывать свои личные учетные данные электронной почты в дополнение к учетным данным учетной записи службы? Если да, то где? Я не нашел на объекте google.auth.JWT.options ничего многообещающего.

1 Ответ

1 голос
/ 13 июля 2020

Зачем вам нужно делегирование всего домена?

  • Когда вы используете учетную запись службы и включаете делегирование всего домена, это означает, что вы разрешаете учетной записи службы выдавать себя за пользователя и действовать в соответствии с его имя
  • Если вы используете учетную запись службы без олицетворения - учетная запись службы может выполнять только те операции, для которых она авторизована - например, она может получать доступ к файлам на вашем Диске или доступ к вашему календарю - но только если вы явно предоставили доступ к ним учетная запись службы!
  • Для выполнения запросов, для которых учетная запись службы не авторизована, вам необходимо сделать так, чтобы учетная запись службы выдавала себя за пользователя домена, имеющего необходимую авторизацию - то есть вам нужно выдавать себя за пользователя
  • Однако, чтобы выдать себя за пользователя, вам необходимо явно предоставить учетной записи службы разрешение действовать от имени пользователя - это называется делегированием всего домена.
  • Включение делегирования на уровне домена не приведет к созданный пользователь должен иметь go через руководство авторизация »или повлиять на любое другое поведение, не связанное с учетной записью службы
  • единственное, что делает domain-wide delegation, - это разрешает учетной записи службы представлять пользователя
  • Без включения делегирования на уровне домена олицетворение пользователь не будет авторизован, и установка subject вызовет ошибку

Ссылки:

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