0

私はアプリケーションのAPIとして動作する一連のFirebase関数を持っています。管理者権限でFirebase Cloud機能からデータベース認証を偽装する方法は?

これらFirebase機能は、このよう管理者権限でデータベースに接続します。

const serviceAccount = require(`./config/xxx-firebase-adminsdk.json`); 
admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: DATABASE_URL, 
}); 

私はカスタムトークンを作成することができたと私は/受信サーバーでそれをデコードするが、私は使用することはできませんよFirebase機能は管理者権限で認証されているため、セキュリティルールには影響しません。

資格情報を偽装する方法や、データベースにアクセスする際に別のユーザーを渡す方法はありますか?

答えて

1

documentationで説明したようにあなたはユーザーレベルの権限を持つ管理者SDKを初期化することができます:あなたはすでに既定のインスタンスを初期化した場合

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://databaseName.firebaseio.com", 
    databaseAuthVariableOverride: { 
    uid: "the-user-id" 
    } 
}, "some-other-name"); 

「いくつかの-他の名」が必要です。詳細はinitializeApp()を参照してください。

この作業を行うには、明らかに認証されたユーザーのUIDを知っている必要があります。また、別のユーザーで何かをやりたいときに毎回SDKを初期化しなければならないことは明らかです。つまり、UIDが異なる可能性があるすべての関数呼び出しでinitを実行する必要があります。

+0

私はそれを試みましたが、 "initializeApp"は一度しか呼び出せないと言います。私が従おうとしているパターンはそれほど奇妙ではありません。私はなぜドキュメントに記述されていないのか疑問に思っています。サービスのアクセスレベルを下げるためにuidを上書きできるとしか言いません。 – martosoler

+0

これで、デフォルトのFirebaseAppオブジェクトを既に別の場所に初期化しておく必要があります。デフォルト以外のインスタンスを初期化し、2番目のパラメータに渡す名前を付ける必要があります。私は一致する答えを更新しました。 –

関連する問題