У меня есть служебная учетная запись с делегированием по всему домену, которую я пытаюсь использовать для настройки делегата Gmail через приложение App Script. Я использую библиотеку Google OAuth2 для скрипта приложения.
Исходный пользователь (который прочитает свою почту и подделывается под действие), является обычным пользователем без прав администратора. При выполнении кода ниже я получаю следующую ошибку о недостаточных разрешениях:
{error={code=403.0, message=Insufficient Permission, errors=[{domain=global, reason=insufficientPermissions, message=Insufficient Permission}]}}
Я могу нормально читать делегатов одного и того же пользователя, я получаю эту ошибку только при попытке изменить любое свойство в своей учетной записи через API.
Я попытался удалить разрешение приложения в разделе «Моя учетная запись> Безопасность» и повторно принять запросы авторизации (мне не выдается приглашение на приглашение Gmail, хотя я включил его в проекте, чтобы обеспечить его безопасность - это в манифесте).
Я не уверен, в чем проблема - существует бесчисленное множество вопросов StackOverflow с таким же кодом ошибки, но, похоже, ни один из них не помог - большинство говорят, чтобы обновить sh учетные данные.
- В проекте с учетной записью службы включены Gmail API и Admin SDK
- Для приложения «Сценарий приложения» в консоли администратора установлено значение «Надежное».
- В службе разрешено делегирование всего домена. account
- Идентификатор клиента для учетной записи службы DWD занесен в белый список в консоли администратора со всеми областями Gmail.
- Я также попытался очистить полномочия, хранящиеся в окне свойств скрипта.
- Все API Google для Gmail включены в белый список на странице экрана OAuth-согласия
Вот мой код:
function setGmailDelegateTest() {
var boxEmail = 'robert.terwilliger@x.com';
var userEmail = 'ihyzy@x.com';
var service = getGmailSharingService_(boxEmail);
if (service.hasAccess()) {
var url = 'https://www.googleapis.com/gmail/v1/users/' + boxEmail +'/settings/delegates';
var response = UrlFetchApp.fetch(url, {
method: 'post',
headers: {
Authorization: 'Bearer ' + service.getAccessToken()
},
body: {
"delegateEmail": userEmail,
"verificationStatus": "accepted"
},
muteHttpExceptions: true
});
var result = JSON.parse(response.getContentText());
Logger.log(result);
} else {
Logger.log(service.getLastError());
}
}
function getGmailSharingService_(boxEmail) {
return OAuth2.createService('gmail:' + boxEmail)
.setTokenUrl('https://oauth2.googleapis.com/token')
.setPrivateKey(PRIVATE_KEY)
.setIssuer(CLIENT_EMAIL)
.setSubject(boxEmail)
.setPropertyStore(PropertiesService.getScriptProperties())
.setScope('https://mail.google.com/ https://www.googleapis.com/auth/gmail.settings.sharing');
}