簡體   English   中英

403 調用者沒有 Firebase 管理 API addFirebase 的權限

[英]403 The caller does not have permission for Firebase Management API addFirebase

我想通過 Firebase Management Api 添加 Firebase 項目。 所以為此。 我在谷歌雲平台控制台上做了項目。 並以所有者身份創建了服務帳戶。

我嘗試閱讀並創建項目 throw google api explorer for addFirebase並且它有效。 但是當我嘗試通過我的代碼做同樣的事情時,它成功讀取了availableProject並將輸出作為

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

但是當我嘗試添加項目時它給了我這個錯誤

{ "error": { "code": 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 文件

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

我發現了一個與此類似的問題。 但這並沒有幫助我解決這里的問題

問Firebase

來自 Firebase REST 參考:方法:projects.addFirebase

要調用 projects.addFirebase,成員必須是現有 GCP 項目的編輯者或所有者。 服務帳號無法調用 projects.addFirebase。

更新:

要調用 projects.addFirebase,項目成員或服務帳戶必須具有以下權限(Editor 和 Owner 的 IAM 角色包含這些權限):firebase.projects.update、resourcemanager.projects.get、serviceusage.services.enable 和 serviceusage .services.get。

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

我不確定我的回答是否對這個問題的作者有幫助,但是如果前兩件事都應該在面對 Google Cloud API 的 403 錯誤時檢查

0) 使用 gcloud 檢查配置

1) 如前所述,首先要檢查服務帳戶的角色。 您通常需要編輯/所有者。

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

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

在此處輸入圖像描述

在此處輸入圖像描述

2) 第二個是檢查是否為項目啟用了 API。

在此處輸入圖像描述 在此處輸入圖像描述

此外,在創建密鑰時,請檢查它是否有正確的服務帳戶。

對於像我這樣剛入門的人來說,這件事可能會有所幫助。 當我設置數據庫時,我選擇Start in locked mode而不是Start in test mode 因此,我不會讀或寫:((。對於初學者,只需將所有內容設置為測試模式即可。希望對您有所幫助。

https://i.stack.imgur.com/nVxjk.png

您的問題意味着您的項目未與您的 firebase 帳戶關聯,這意味着您必須使用您的 firebase 帳戶登錄。 比你將獲得許可

  1. 在你的 firebase 項目目錄中鍵入cd functions
  2. 輸入firebase login
  3. 使用與您的 firebase 帳戶關聯的 Gmail 登錄

它會起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM