L'API Gmail renvoie le code d'erreur 403 et " Délégation refusée pour "
échec de L'API Gmail pour un domaine lors de la récupération des messages avec cette erreur:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 OK
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Delegation denied for <user email>",
"reason" : "forbidden"
} ],
"message" : "Delegation denied for <user email>"
}
j'utilise la délégation de pouvoir de domaine de OAuth 2.0 et de Google Apps pour accéder aux données de l'utilisateur. Le domaine a accordé des droits d'accès aux données de l'application.
2 réponses
Semble que la meilleure chose à faire est de toujours avoir userId="me" dans vos demandes. Cela dit à L'API d'utiliser simplement la boîte aux lettres authentifiée de l'Utilisateur--pas besoin de se fier aux adresses e-mail.
Nos utilisateurs avaient migré dans un domaine et leur compte avait alias attaché à elle. Nous avions besoin de mettre par défaut l'adresse SendAs à l'un des alias importés et voulons un moyen de l'automatiser. L'API Gmail ressemblait à la solution, mais notre utilisateur privilégié avec des rôles pour apporter des changements aux comptes ne fonctionnait pas - nous avons continué à voir la "délégation refusée pour" l'erreur 403.
voici un exemple PHP de la façon dont nous avons pu lister leurs paramètres SendAs.
<?PHP
//
// Description:
// List the user's SendAs addresses.
//
// Documentation:
// https://developers.google.com/gmail/api/v1/reference/users/settings/sendAs
// https://developers.google.com/gmail/api/v1/reference/users/settings/sendAs/list
//
// Local Path:
// /path/to/api/vendor/google/apiclient-services/src/Google/Service/Gmail.php
// /path/to/api/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsSendAs.php
//
// Version:
// Google_Client::LIBVER == 2.1.1
//
require_once $API_PATH . '/path/to/google-api-php-client/vendor/autoload.php';
date_default_timezone_set('America/Los_Angeles');
// this is the service account json file used to make api calls within our domain
$serviceAccount = '/path/to/service-account-with-domain-wide-delagation.json';
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $serviceAccount );
$userKey = 'someuser@my.domain';
// In the Admin Directory API, we may do things like create accounts with
// an account having roles to make changes. With the Gmail API, we cannot
// use those accounts to make changes. Instead, we impersonate
// the user to manage their account.
$impersonateUser = $userKey;
// these are the scope(s) used.
define('SCOPES', implode(' ', array( Google_Service_Gmail::GMAIL_SETTINGS_BASIC ) ) );
$client = new Google_Client();
$client->useApplicationDefaultCredentials(); // loads whats in that json service account file.
$client->setScopes(SCOPES); // adds the scopes
$client->setSubject($impersonateUser); // account authorized to perform operation
$gmailObj = new Google_Service_Gmail($client);
$res = $gmailObj->users_settings_sendAs->listUsersSettingsSendAs($userKey);
print_r($res);
?>