2017-03-24 11 views
0

firebase Admin Auth APIを使用してid-token-verificationを使用してユーザを認証するウェブサイトをnodejs(expressjs)に作成しています。ログインしている各ユーザのAdmin Firebase Appを初期化する

このトークンはサーバーから保存され、サーバーから作成されるリアルタイムデータベースへのクエリに使用されます。私の質問は、権限を制限に関してれ

、ドキュメントでは、サーバーがアクセスなどのユーザーのアクションをエミュレートしたい場合databaseAuthVariableOverrideが自分uid

Taken from the admin auth docs:

を使用してユーザーを模倣するために使用されるべきであると言いますFirebase Realtime Databaseをそのユーザとして使用するには、まずそのユーザのIDトークンを確認してデコードする必要があります。その後、ユーザーごとにので、あなたのサーバー

の権限を制限するdatabaseAuthVariableOverrideオプションを使用します

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://databaseName.firebaseio.com", 
    databaseAuthVariableOverride: { 
    uid: userId1 
    } 
}, userId1) 

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://databaseName.firebaseio.com", 
    databaseAuthVariableOverride: { 
    uid: userId2 
    } 
}, userId2) 

ログインしているユーザーごとに新しいfirebaseAppを初期化することが可能だろう、または複数のユーザーの制限特権を処理するための標準的な方法がありますか?

答えて

3

これは、管理SDKの使用方法を正確には示していません。あなたは確かにこの方法でユーザーをシミュレートすることができますが、それはベストプラクティスではありません。

ユーザーは、クライアントを介して自分のデータを読み書きすることになっています。あなたが望むルールで遊ぶことができないと信じることができないため、セキュリティルールが存在します。

サーバー上では、すべてのロジックを制御するので、エンドユーザーをシミュレートする必要はありません。自分のコードが読み書きするデータで適切な処理を行うことができるからです。

uidプロパティは、エンドユーザーをシミュレートするのではなく、管理する別の種類の管理役割への権限の一時的な削除を実装するためのものです。そのuidは、通常、そのロールまたはサービスの特権レベルを定義するセキュリティ規則でハードコードされています。これがどのように機能するかについてのより良い説明can be found here。 (これは、あなたが引用した文書の中で、「ここ」という言葉のリンクです)

関連する問題