web-dev-qa-db-fra.com

Pourquoi le script de mes applications déployé en tant qu'exécutable de l'API renvoie-t-il une autorisation refusée?

J'ai créé un script dans l'éditeur de script et l'ai publié en tant que "Déployer en tant qu'exécutable d'API". Dans ce script, j'ai fourni un doc_id à ma feuille et défini une fonction pour obtenir les données de cette feuille.

Je suis ensuite allé sur https://developers.google.com/apps-script/execution/rest/v1/scripts/run pour tester l'API d'exécution. J'ai ajouté les portées, autorisé l'application et essayé. Je reçois le message d'erreur suivant:

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

Quelqu'un peut-il me dire ce que je fais mal?

9
Bellave Jayaram

Assurez-vous que le script d'application est associé au projet de console de développement approprié.

Le script doit être associé à l'ID de projet de la console de développement correspondant à l'ID de client OAuth 2.0 utilisé (l'option "API d'exécution de script Apps" doit également être activée dans ce projet de console de développement).

Pour modifier le projet de la console de développement pour un script d'application, sélectionnez l'élément de menu suivant: Ressources> Projet de la console de développement ...

Sur cet écran, entrez le numéro de projet de votre console de développement.

23
Farhad Khairzad

Même si tout va bien, vous pouvez obtenir cette erreur avec "devMode":true. Grâce à cela, j'ai perdu une demi-journée lorsque j'ai essayé de déployer pour d'autres utilisateurs. 

Juste pour la référence future. 

7
goodhyun

Il vous suffit d'ajouter l'utilisateur du compte de service en tant qu'éditeur sur le projet.

L'e-mail du compte de service à ajouter ressemble à quelque chose comme ceci {project-name}@{project-name}.iam.gserviceaccount.com

3
chemdrew

J'ai fait un mélange de toutes vos suggestions et je devais utiliser l'ID non obsolète du projet. Lorsque je publie le script, il me donne un identifiant que j'utilisais avec succès tant que le propriétaire exécutait la routine, et uniquement dans Google Chrome (si je l'essaie sur Edge, cela échoue). Lorsque je publie et l'essaie avec un autre utilisateur, il ne fonctionne plus. J'ouvre le script, je vais dans les propriétés du fichier/projet et je copie le plus long ID de script. La routine commence alors à fonctionner pour n'importe quel utilisateur. Dans l'image suivante, je souligne en rouge la clé qui fonctionne uniquement pour le développeur, et en vert la clé qui fonctionne pour tous les utilisateurs (ils sont configurés dans leur contexte et mon environnement est en espagnol, les options traduites peuvent varier, désolé).

 Project properties keys

Je crois qu'il vaut la peine de faire un résumé:

  1. Je suis les intructions dans ' Utilisation de l'API d'exécution ' et quickstarts pour publier mon script en tant qu'API d'exécution. (Créez le script, activez l'API d'exécution de script Google Apps, publiez-le en tant qu'API exécutable avec Access par tout le monde)  enter image description here
  2. J'ai rendu le script visible pour tout le monde, sur Fichier/Partage:  API sharing settings
  3. Je me suis assuré que devMode n'était pas défini sur true lors de mon appel. Voici le snipet d'appel JavaScript:  JavaScript call snippet
  4. Je me suis assuré que tous les domaines du projet étaient inclus dans la demande OAuth:  API scopes  API OAuth call
  5. Je dois attendre quelques minutes pour obtenir tous les droits de sécurité afin de me préparer (informations d'identification OAuth)

En gros, ce sont toutes les étapes nécessaires que je devais suivre pour que le script soit opérationnel. J'espère que ça aide. Enfin, je voudrais que vous voyiez ce que j’ai vu quand il a échoué et quand il a réussi:  API call fail  API call success

Je vous remercie!

2
Chesare

J'ai également fait face à l'erreur et tout était associé à la suite ... Après un certain temps d'investigation, j'ai découvert que feuille devait être partagée par link . Ceci est une limitation de googleapis v4.

1
D.Dimitrioglo

J'ai eu le même problème d'autorisations et je l'ai résolu en modifiant le statut de ma fiche google en public. Maintenant, je peux lire les données en utilisant la méthode GET

0
victor