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 отображает пользователю.
Принимая это во внимание, я предлагаю вам разделять области действия пробелами, а не запятыми .