2017-03-09 3 views
1

Nous essayons de créer un service pour exporter des fichiers google drive dans notre domaine gsuite.google-api-php-client "erreur": "unauthorized_client"

Nous travaillons avec le https://github.com/google/google-api-php-client

Nous avons fait un utilisateur de service, téléchargé et enregistré les informations d'identification utilisateur et domaine à l'échelle d'accès accordé à l'utilisateur du service.

Avec l'exemple le plus simple comme ci-dessous (comme dans tous les doc, je l'ai trouvé):

putenv('GOOGLE_APPLICATION_CREDENTIALS='/service-account-credentials.json'); 

$client = new \Google_Client(); 
$client->setAuthConfig('service-account-credentials.json'); 

$client->setScopes('https://www.googleapis.com/auth/drive.file'); 

$client->useApplicationDefaultCredentials(); 
$client->setSubject('[email protected]'); 

$service = new \Google_Service_Drive($client); 

$service->files->listFiles(); 

dès que nous incluons la ligne $client->setSubject('[email protected]'); il est tomber l'erreur suivante:

{ 
    "error": "unauthorized_client", 
    "error_description": "Client is unauthorized to retrieve access tokens using this method." 
} 

Quelqu'un at-il une idée, ou peut partager un échantillon de code pour ce problème. Il est un vrai blocage pour nous et pour l'instant je n'ai aucune idée pourquoi cette erreur apparaît

+0

Peut-être juste une faute de frappe ici peut-être, mais vos première et troisième lignes manquent chacune une marque de citation de sorte que vos chaînes sont tout foiré. – Pacio

+0

thx, mais ce n'était que des fautes de frappe ici sur stackoverflow – vanBrunneren

+0

Vous pouvez vous référer à ce [fil] (http://stackoverflow.com/questions/42067338/client-is-unauthorized-to-retrieve-access-tokens-using-this -méthode). Votre erreur signifie qu'il y a un problème avec votre authentification. Vérifiez si vous [accordez l'accès au compte de service] (https://developers.google.com/api-client-library/php/auth/service-accounts#delegatingauthority) correctement. Le compte de service que vous avez créé doit avoir accès aux données utilisateur auxquelles vous souhaitez accéder. – abielita

Répondre

1

J'ai finalement réussi

Après quelques trys je réalisais que je déléguait domaine à l'échelle d'accès au mauvais Identité du client. J'ai toujours pensé que ça devait être le même que le "client_email" que j'utilise dans le script. Mais c'est vraiment (vraiment, vraiment, vraiment) important, que c'est le "client_id" (comme mentionné dans la documentation d'ailleurs). Il ne s'agit pas d'un e-mail ou d'une chaîne. Il s'agit simplement d'un nombre simple que vous obtenez lorsque vous créez une clé pour le compte de service.

+0

Je ne suis pas sûr que je suis. Vous affectez l'accès à l'ensemble du domaine au compte de service, pas un ID client spécifique (bien que le compte de service ait un ID client). Avez-vous créé plusieurs comptes de service et affecté DwD au mauvais compte? Inclure le code si possible! – sboss

+0

mais si vous insérez le client_email dans celui-ci, une fois que vous aurez cliqué sur "autoriser", il remplacera cet email par un identifiant de client. Je suis très jaloux que vous ayez eu ce travail parce que je suis toujours aux prises avec ça. – user3505901