Как использовать служебную учетную запись для доступа к GMAIL API для учетной записи электронной почты GSuite - PullRequest
0 голосов
/ 11 июля 2020

Я хочу, чтобы моя учетная запись службы выдавала себя за одного из пользователей GSuite. Я

  • создал проект через GCP
  • включил GMail API в проекте
  • добавил сервисный аккаунт в этот проект
  • включил domain-wide delegation в настройках учетной записи службы на GCP
  • добавил API Client с service account id в расширенных настройках через панель администратора Google для GSuite

Пока иду через docs (java) я видел это

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json"))
    .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
    .createDelegated("user@example.com");

Здесь они указывают, какого пользователя учетная запись службы должна олицетворять. Этот код находится в java. Мне нужно выполнить sh то же самое в nodejs.

Просматривая документацию nodejs-client для googleapis, я обнаружил следующее:

const {google} = require('googleapis');

const auth = new google.auth.GoogleAuth({
  keyFile: '/path/to/your-secret-key.json',
  scopes: ['https://www.googleapis.com/auth/cloud-platform'],
});

и

const {google} = require('googleapis');

const oauth2Client = new google.auth.OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URL
);

// set auth as a global default
google.options({
  auth: oauth2Client
});

В чем разница между GoogleAuth и OAuth2 здесь?

Как мне настроить все, чтобы мое приложение node.js могло доступ к user@abc.xyz почте через сервисный аккаунт?

Как указать email Я хочу получить доступ через service account?

1 Ответ

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

В документации указывается:

Вместо того, чтобы вручную создавать клиент OAuth2, клиент JWT или клиент вычислений, библиотека auth может создать для вас правильный тип учетных данных, в зависимости от в среде, в которой работает ваш код.

Другими словами:

  • google.auth.GoogleAuth - это библиотечный инструмент, который динамически создает для вас правильные учетные данные, если вы не знать, какие учетные данные вам нужны
  • google.auth.OAuth2 всегда создает специальные учетные данные OAuth2
  • Для большинства приложений, где вы аутентифицируете себя как себя, OAth2 - это то, что вам нужно
  • Однако для использования учетной записи службы вам необходимо создать JSON Web Token указанный здесь

Sample

const {JWT} = require('google-auth-library');
//THE PATH TO YOUR SERVICE ACCOUNT CRENDETIALS JSON FILE
const keys = require('./jwt.keys.json');

async function main() {
  const client = new JWT({
    email: keys.client_email,
    key: keys.private_key,
    scopes: ['YOUR SCOPES HERE'],
    subject: USER_EMAIL
  });
  const url = `https://dns.googleapis.com/dns/v1/projects/${keys.project_id}`;
  const res = await client.request({url});
  console.log(res.data);
}

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