0

Je suis sur le point d'abandonner car je ne peux pas savoir ce que je fais de mal."Autorisation insuffisante" lors d'une tentative d'authentification sur le stockage dans le cloud via apps-script

Je dispose d'un compartiment de stockage cloud avec les données de facturation de nos sociétés (objets de fichier json écrits par google) que je suis supposé traiter dans des feuilles de calcul.

Comme il n'y a pas d'applications API de script pour oauth2, je me sers de la bibliothèque OAuth2 personnalisée fournie par Google avec la touche « 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF », et ont la configuration de la demande auth comme indiqué dans cet exemple pour les comptes de service: https://github.com/googlesamples/apps-script-oauth2/blob/master/samples/GoogleServiceAccount.gs

Le jeton est en cours de création et placé dans la banque de propriétés des scripts, où je peux l'afficher. Jusqu'ici tout va bien.

Je possède ce code pour demander le jeton et je suis en train de lister le contenu du seau dans la fonction « getFilesList() »:

function getService() { 
return OAuth2.createService('CloudStoreGrab-Service') 
    .setTokenUrl('https://accounts.google.com/o/oauth2/token') 

    .setPrivateKey(creds_private_key) 
    .setIssuer(creds_client_email) 
    .setSubject(creds_user_email) 
    .setPropertyStore(PropertiesService.getScriptProperties()) 
    .setScope(['https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/script.external_request','https://www.googleapis.com/auth/script.storage','https://www.googleapis.com/auth/spreadsheets']); 
} 

function getFilesList() { 
var service = getService(); 
service.reset(); 
if (service.hasAccess()) { 
    var url = 'https://www.googleapis.com/storage/v1/b/'+bucket+'/o'; 
    var response = UrlFetchApp.fetch(url, { 
     method: "GET", 
     muteHttpExceptions: true,   
     headers: { 
      Authorization: 'Bearer ' + service.getAccessToken()    
     } 
    }); 
} 
Logger.log("Response:", response.getContentText()) 
} 

Peu importe ce que je semble essayer, la demande renvoie toujours "403 Autorisation insuffisante". Le compte de service a tous les rôles et autorisations nécessaires activés (DwD, Storage-Administrator, Project-Owner). Lorsque je m'authentifie avec les mêmes informations d'identification à partir de gcloud et puis parcourir le compartiment avec gsutils, je peux voir la liste. Cela m'amène à croire que je demande encore incorrectement le jeton d'authentification. J'ai essayé d'utiliser le jeton généré avec curl et je reçois la même réponse d'autorisation insuffisante.

Qu'est-ce que je fais de mal en demandant le jeton? Les portées demandées sont-elles trop étroites?

Répondre

0

Les portées demandées sont-elles trop étroites?

Qu'elles le sont. Vous pouvez trouver le OAuth scopes for Google's Cloud Storage API ci-dessous (vous ne devez utiliser tous, choisir ceux qui conviennent le mieux à votre cas d'utilisation, la 1ère et 5ème champs d'application dans la liste devrait être suffisante):

À l'avenir, vous pouvez trouver les portées OAuth requises pour toute API Google dont vous avez besoin au lien suivant: https://developers.google.com/identity/protocols/googlescopes

+0

Merci beaucoup! J'ai dû ajouter la portée cloud-platform.read-only et maintenant tout fonctionne bien. Nous avions défini cette portée au début, mais il manquait manifestement quelque chose d'autre et nous avons donc pris cette option. –