API GMail установил неосновную отправку как ошибку возврата подписи 403

Я делаю приложение, которое должно устанавливать подпись для каждого пользователя в домене. Когда я пытаюсь установить подпись для основных псевдонимов, это работает нормально, но это решение не работает для других псевдонимов (неосновных псевдонимов).

Я использую делегирование всего домена, которое работает нормально, поскольку я могу установить подпись для всех основных отправлений в качестве псевдонимов в домене. Для этого я использую запрос: 'www.googleapis.com/gmail/v1/users/<email_address> / settings / sendAs / <alias_address>'. Когда я делаю то же самое для неосновных псевдонимов, я получаю ошибку 403 с сообщением о том, что мне не хватает области www.googleapis.com/auth/gmail.settings.sharing.

      Missing required scope "https://www.googleapis.com/auth/gmail.settings.sharing" for modifying non-primary SendAs

Я использую в своем коде следующие области:

      "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.settings.basic",
    "https://www.googleapis.com/auth/gmail.settings.sharing",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/documents",
    "https://www.googleapis.com/auth/admin.directory.user.readonly",
    "https://www.googleapis.com/auth/drive.readonly"
  ]

Как видите, присутствует «разделение» области видимости.

      // The service that allow me to list send as alias
var serviceListe = getDomainWideDelegationService('Gmail: ', 'https://www.googleapis.com/auth/gmail.settings.basic', user.primaryEmail)

// THe service that allow me to edit send as signature
var serviceModif = getDomainWideDelegationService('Gmail: ', 'https://www.googleapis.com/auth/gmail.settings.sharing', user.primaryEmail)

Код, возвращающий делегирование домена:

      function getDomainWideDelegationService(serviceName, scope, email) {
  return OAuth2.createService(serviceName + email)
      // Set the endpoint URL.
      .setTokenUrl('https://oauth2.googleapis.com/token')

      // Set the private key and issuer.
      .setPrivateKey(OAUTH2_SERVICE_ACCOUNT_PRIVATE_KEY)
      .setIssuer(OAUTH2_SERVICE_ACCOUNT_CLIENT_EMAIL)

      // Set the name of the user to impersonate. This will only work for
      // Google Apps for Work/EDU accounts whose admin has setup domain-wide
      // delegation:
      // https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
      .setSubject(email)

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getScriptProperties())

      // Set the scope. This must match one of the scopes configured during the
      // setup of domain-wide delegation.
      .setScope(scope);
}

1 ответ

Согласно документации здесь :

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

Принимая это во внимание, я предлагаю вам разделять области действия пробелами, а не запятыми .

Ссылка

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