web-dev-qa-db-fra.com

L'API Google Sheets renvoie "L'appelant n'a pas la permission" lors de l'utilisation de la clé de serveur.

J'ai généré une clé de serveur dans API Manager et tenté d'exécuter les opérations suivantes sur mon Mac:

curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'

Mais voici ce qu'il retourne:

{
 "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

Qu'est-ce que je fais mal ici?

24
Instabrite

Je sais qu'il est un peu tard pour répondre, mais pour d'autres personnes aux prises avec le même problème.
Juste changez l’autorisation de la feuille en public sur votre lecteur afin de pouvoir y accéder sans authentification via des appels API. 

Pour changer d'accès: 

  1. Ouvrir la feuille dans google drive
  2. En haut à droite, cliquez sur partager
  3. En bas de la fenêtre d'invite, cliquez sur avancé
  4. Modifier l'autorisation en public ou avec un lien (aucune connexion requise) 

Envoyer une demande d'API pour récupérer les données des feuilles sans authentification. 

Remarque: si la feuille contient des données sensibles, il est dangereux de la rendre publique et de le faire plutôt avec un accès authentifié. 

27
WLatif

Pour résoudre ce problème, essayez de:

  1. créer un compte de service: https://console.developers.google.com/iam-admin/serviceaccounts/
  2. dans les options, créez une clé: cette clé est votre client_secret.json habituel - utilisez-la de la même manière
  3. ajoutez l'autorisation de propriétaire à ce compte de service (nom du membre = identifiant du compte de service = adresse électronique du compte de service ex: [email protected]
  4. copier l'adresse e-mail de votre compte de service = ID du compte de service
  5. allez simplement dans votre navigateur à la feuille Google avec laquelle vous souhaitez interagir
  6. allez à PARTAGER en haut à droite de votre écran
  7. accédez aux paramètres avancés et partagez-la avec l'adresse électronique de votre compte de service, par exemple: [email protected].

Cela a fonctionné pour moi :)

18
Thomas Beaudouin

Assurez-vous de faire attention au commentaire de @ KishanPatel:

De plus, vous pouvez partager cette fiche avec des emails spécifiques, par ex. ton service compte (projet) email. "client_email": "[email protected]", cela permettra accéder feuille par votre script.

7
Horen

Le moyen le plus simple est de réparer en utilisant gcloud cli. Plus de documents ici https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin

Lorsque vous pourrez utiliser cet outil, appelez

gcloud init

puis vérifiez votre projet actif et vos informations d'identification

gcloud config configurations list

Si ce n'est pas le cas, assurez-vous d'être authentifié avec le bon compte:

gcloud auth list
* account 1
  account 2

Changer sur le compte du projet sinon:

gcloud config set account `ACCOUNT`

Selon le compte, la liste de projets sera différente:

gcloud projects list

- project 1
- project 2...

Passer au projet prévu:

gcloud config set project `PROJECT NAME`

Ensuite, créez les informations d'identification par défaut de l'application avec gcloud auth application-default login, puis google-cloud détectera automatiquement ces informations d'identification.

1
Yuliia Ashomok