6
votes

403 L'appelant n'a pas l'autorisation pour l'API Firebase Management addFirebase

Je souhaite ajouter un projet Firebase via Firebase Management Api. Alors pour ça. J'ai réalisé un projet sur la console Google Cloud Platform. Et créé un compte de service avec l'autorisation en tant que propriétaire.

J'ai essayé de lire et de créer un projet avec l'explorateur d'api google pour addFirebase et cela fonctionne. Mais quand j'essaie de faire la même chose avec mon code, il lit le projet disponible avec succès et donne la sortie comme

{"projectInfo": [{"project": "projects / firebase-api-238012", "displayName": "Firebase-Api"}]}

mais quand j'essaie d'ajouter un projet, cela me donne cette erreur

{"error": {"code": 403, "message": "L'appelant n'a pas la permission", "status": "PERMISSION_DENIED"}}

Je ne sais pas pourquoi il ne crée pas de projet. De quelle autre permission il a besoin. Et pourquoi cela m'a permis de lire d'abord les projets disponibles.

voici comment j'essaye d'ajouter mon projet.

jwt.js

const { google } = require('googleapis');
const request = require('request');
const { connect } = require('./jwt');
const availableProjects = 'https://firebase.googleapis.com/v1beta1/availableProjects';


async function getAccessToken() {
let client = await connect();
let accessToken = await client.getAccessToken();
let res = await getProjects(accessToken.token)
}

getAccessToken().catch(err => {
console.log(JSON.stringify(err))
})

const bodys = {
"timeZone": "America/Los_Angeles",
"locationId": "asia-south1",
"regionCode": "US"
}

async function getProjects(accesstoken) {

let options = {
url: availableProjects,
headers: {
  'Authorization': 'Bearer ' + accesstoken,
  'Accept': 'application/json',
  'Content-Type': 'application/json'
}
}

return request(options, async function (err, res) {
if (err) {
  console.error(err + " error");
 } else {
  //here it gives successful output
  console.log("response")
  console.log(res.body);
  let bodyJson = JSON.parse(res.body);
  let projectName = bodyJson.projectInfo[0].project;
  console.log(projectName)
  await addProject(accesstoken, projectName)
  return res.body;
 }
 });
 }

async function addProject(accesstoken, projecctID) {

 fbUrl = getAddFBUrl(projecctID);
 let options = {
 url: fbUrl,
  headers: {
  'Authorization': 'Bearer ' + accesstoken,
  'Accept': 'application/json',
  'Content-Type': 'application/json'
  },
  body:JSON.stringify(bodys)
 }

return request.post(options, function (err, res) {
 if (err) {
  console.error(err + " error");
 } else {
//here in response out put as permission denied 403
  console.log("response")
  console.log(res.body);
  console.log(JSON.stringify(res));
  return res.body;
 }

 });
}


function getAddFBUrl(projectId) {
return 'https://firebase.googleapis.com/v1beta1/' + projectId + 
':addFirebase';
}

}

fichier index.js

const { google } = require('googleapis');
var serviceAccountJwt = require('./Firebase-Api-b0e41b85ad44.json');

exports.connect = async () => {
return new Promise((resolve, reject) => {

    // scope is based on what is needed in our api
    const scope = ['https://www.googleapis.com/auth/firebase', 'https://www.googleapis.com/auth/cloud-platform'];

    // create our client with the service account JWT
    const { client_email, private_key } = serviceAccountJwt;
    const client = new google.auth.JWT(client_email, null, private_key, scope, null);

    // perform authorization and resolve with the client

    return client.authorize((err) => {
        if (err) { reject(err) }
        else {
            resolve(client)
        };
    });
});

J'ai trouvé une question similaire à celle-ci. Mais cela ne m'a pas aidé à résoudre mon problème qui est ici

AskFirebase


5 commentaires

Hé mec, je suis confronté à un problème similaire lorsque j'essaie d'ajouter Firebase par programmation. Avez-vous réussi à résoudre le problème?


Hé mon frère, je n'ai pas encore de solution.


Bro, avez-vous une solution?


@VaradMondkar s'il vous plaît lire le commentaire de la réponse ci-dessous. J'espère que vous obtiendrez de l'aide à partir de là. Mais je suis passé à une tâche différente. Je ne travaille pas dessus et je ne l'ai pas essayé davantage. Si cela vous aide et que vous avez du succès. Veuillez donner une réponse afin qu'elle soit utile aux autres


@FaisalAhmed Merci pour la réponse. Je vous ferai savoir si j'obtiens une solution.


3 Réponses :


6
votes

À partir de la référence Firebase REST: Méthode: projects.addFirebase

Pour appeler projects.addFirebase, un membre doit être un éditeur ou un propriétaire du projet GCP existant. Les comptes de service ne peuvent pas appeler projects.addFirebase.

Mise à jour:

Pour appeler projects.addFirebase, un membre de projet ou un compte de service doit disposer des autorisations suivantes (les rôles IAM d'éditeur et de propriétaire contiennent ces autorisations): firebase.projects.update, resourcemanager.projects.get, serviceusage.services.enable et serviceusage .services.get.

https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects/addFirebase


6 commentaires

Cher @ ersin-ertan. Je pense que vous n'avez pas bien lu ma question. Où, j'ai mentionné en deuxième ligne que j'ai créé un compte de service avec l'autorisation en tant que propriétaire . Cependant merci pour votre réponse


Salut @FaisalAhmed, je ne vois pas pourquoi vous avez insisté sur la création du compte de service avec l'autorisation du propriétaire. La façon dont je comprends la référence est que les comptes de service ne peuvent pas appeler l'API quelle que soit l'autorisation dont ils disposent.


Mais, j'ai pu lire le projet disponible via l'API en utilisant des comptes de service.Veuillez lire ma question où je l'ai clairement mentionné


@FaisalAhmed n'a pas besoin d'être impoli en me disant à plusieurs reprises de lire la question. J'ai hésité à faire un suivi à cause de cela. J'essaie de vous aider à comprendre que vous ne pouvez pas effectuer cette opération avec un compte de service. Où est-il mentionné que parce que vous avez pu répertorier des projets, cela qualifie le compte de service pour ajouter un projet? Ce sont deux opérations différentes. Veuillez marquer ma réponse comme correcte.


Salut @ ersin-ertan. Désolé si cela vous semble impoli. J'ai compris le point que vous vouliez dire.


Pour ceux qui peuvent avoir plus d'un compte Firebase: n'oubliez pas de basculer vers le bon, qui convient au projet que vous souhaitez exécuter .



0
votes

Votre problème signifie que votre projet n'est pas lié à votre compte Firebase, ce qui signifie que vous devez vous connecter avec votre compte Firebase. Que tu auras la permission

  1. tapez les cd functions dans le répertoire de votre projet Firebase
  2. type de firebase login
  3. connectez-vous avec le Gmail qui est connecté à votre compte Firebase

Ça va marcher


2 commentaires

Salut @Abdullah Bhojani! Bienvenue sur StackOverflow et merci de votre contribution. J'ai ajouté une mise en forme pour faciliter la lisibilité, mais vous devez quand même expliquer pourquoi les étapes fonctionneront (en plus des étapes elles-mêmes). Il s'agit d'une pratique recommandée afin que le demandeur puisse également comprendre pourquoi il fait ce que vous recommandez. J'espère que cela t'aides.


J'ai modifié ma réponse pour plus de facilité



0
votes

Je ne sais pas si ma réponse sera utile pour l'auteur de cette question, mais ceci si les deux premières choses doivent toutes être vérifiées face à une erreur 403 avec les API Google Cloud

0) Vérifiez la configuration avec gcloud

1) Comme mentionné précédemment, la première chose à faire est de vérifier le rôle du compte de service. Vous avez généralement besoin d'un éditeur / propriétaire.

https://cloud.google.com/iam/docs/understanding-roles

https://console.cloud.google.com/iam-admin

entrez la description de l'image ici

entrez la description de l'image ici

2) La deuxième consiste à vérifier si l'API est activée pour le projet.

entrez la description de l'image icientrez la description de l'image ici

Lors de la création d'une clé, vérifiez également que le compte de service est correct.


0 commentaires