403 Вызывающий не имеет разрешения для API управления Firebase addFirebase - PullRequest
3 голосов
/ 19 апреля 2019

Я хочу добавить проект Firebase через Firebase Management Api. Так и для этого. Я сделал проект на консоли Google Cloud Platform. И создал учетную запись службы с разрешения в качестве владельца.

Я попытался прочитать и создать проект throw google api explorer для addFirebase , и он работает. Но когда я пытаюсь сделать то же самое через мой код, он успешно читает availableProject и выдает вывод как

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

но когда я пытаюсь добавить проект, он выдаёт мне эту ошибку

{ "ошибка": { «код»: 403, "message": "Звонящий не имеет разрешения", "status": "PERMISSION_DENIED" } }

Я не знаю, почему он не создает проект. Какое еще разрешение ему нужно. И почему это позволило мне сначала прочитать доступные проекты.

вот как я пытаюсь добавить свой проект.

jwt.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)
        };
    });
});

}

index.js file

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';
}

Я нашел один подобный вопрос к этому. Но это не помогло мне решить мою проблему, которая здесь

AskFirebase

1 Ответ

0 голосов
/ 30 мая 2019

Из ссылки на REST в Firebase: Метод: projects.addFirebase

Для вызова projects.addFirebase участник должен быть редактором или владельцем существующий проект GCP. Сервисные аккаунты не могут звонить projects.addFirebase.

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

...