Google Directory API: невозможно получить доступ к конечным точкам пользователя / группы с использованием служебной учетной записи (403) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь проверить членов групп, используя API-интерфейс Google Directory, и не могу получить сообщение об ошибке 403. Каждый раз, когда я делаю запрос.

Я использую служебную учетную запись, для которой включен параметр «Включить». Опция G Suite для домена ". Я также добавил области "https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.group", использующие идентификатор клиента в Suite, в разделе "Управление клиентским доступом API"

в отношении кода, Я использую Node для этого, и googleapis предоставил пакет googleapis из NPM.

Внешний файл JSON - это файл учетных данных JSON, загруженный при создании пользователя службы.

Вот код моей попытки получить запрос.

import { google } from 'googleapis';

async function getGroupUsers(){
const auth = await google.auth.getClient({
    keyFile: './src/jwt.keys.json',
    scopes: [
      'https://www.googleapis.com/auth/admin.directory.group',
      'https://www.googleapis.com/auth/admin.directory.group.member',
    ],
  });
  const admin = google.admin({
    version: 'directory_v1',
    auth,
  });

  const res = await admin.groups.get({
    groupKey: 'redacted@domain.redacted',
  });
  console.log(res)
}

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

Очевидно, что здесь упущено что-то очевидное, поскольку документация Google для этого по всему магазину печально.

Помощь с благодарностью!

Спасибо

Gareth

1 Ответ

0 голосов
/ 15 апреля 2020

Хорошо, после долгих ударов головой и поиска в Google, я, наконец, согласился с этим, окончательный рабочий код выглядит следующим образом, а не включает значение client.subject, которое должно быть администратором для рассматриваемого домена.

async function validateToken(idToken) {

  const keys = JSON.parse(GOOGLE_CREDS);

  const client = auth.fromJSON(keys);

  client.scopes = [
    'https://www.googleapis.com/auth/admin.directory.user',
    'https://www.googleapis.com/auth/admin.directory.group',
  ];

  client.subject = 'admin@gsuite.domain';

  const admin = google.admin({
    version: 'directory_v1',
    // auth,
    auth: client,
  });

  const res = await admin.groups.list({
    domain: 'redacted',
    userKey: email,
  });

  const { groups } = res.data;
  let role = '';

  // Check for user role
  if (containsGroup(USER_GROUP, groups)) {
    role = USER_GROUP;
  }

  // Check for admin role
  if (containsGroup(ADMIN_GROUP, groups)) {
    role = ADMIN_GROUP;
  }

  // Not an admin or user so return unathenticated
  if (role === '') {
    return authResponse();
  }

  return successResponse({
    'X-Hasura-User-Id': userid,
    'X-Hasura-Email': email,
    'X-Hasura-Role': role,
    'X-Hasura-Groups': groups.map(group => group.id),
    'Cache-Control': 'max-age=600',
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...