0

ローカルユーザーのリストを持つアンドロイドアプリがあります。このアプリケーションにはFirebaseに1人の専用ユーザーがいて(他のユーザーはローカルで管理されています)、Realtime Databaseへのアクセスに使用する必要があります。 UIDは、セキュリティルールを適用し、特定のデータ要素へのアクセスを制限するために使用されます。カスタムトークンまたはサービスアカウント(databaseAuthVariableOverrideを使用)という2つのオプションがあります。Firebaseカスタムトークンとサービスアカウント

サービスアカウントのアプローチを使用することで得られるセキュリティ上の問題は何ですか?完全にアクセスできますか?おそらく、それを最小限のアクションセットに制限することができますか?

カスタムトークンアプローチでトークンの有効期限が問題になることがあります。トークンの有効性を大幅に拡張する方法はありますか?アンドロイドでカスタムトークンを生成する最善の方法は何でしょうか?

答えて

0

サービスアカウントでは、インストールされているすべてのアプリケーションにデータベースへのアクセスをハードコーディングしています。言い換えれば、あなたのアプリケーションをインストールするすべての人に同じことが表示されます。

通常、トークン方式を使用して、データベース上の異なるノードへのアクセスを異なるユーザーに合わせて調整します。これは通常、たとえば、あなたのノードのためのいくつかの簡単なルールを設定することによって達成される:

// Sample firebase rules 
    { 
     "rules": { 
     "messages": { 
      // Only admin servers with service accounts should r/w here 
      ".read": "auth.uid == 'server-with-svc-acct'", 
      ".write": "auth.uid == 'server-with-svc-acct'", 
      "$user_id": { 
      // Users can only read their own nodes 
      ".read": "auth.uid == $user_id", 
      ".write": "auth.uid == $user_id", 

      } 
     } 
     } 
    } 

あなたはofficial documentationにGoogle+のでのauth方法の詳細を確認することができます。ただし、一度一般的な用語でAUTH、あなたが得ることができます固有のユーザーIDを使用して、リアルタイムデータベースの目的のノードに書き込みます。ユーザーは、他のノードへのアクセスを持っていない、ルールが彼を制限するよう:あなたのサービスのアカウントの秘密を守るために安全である、あなたのサーバーについては、

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){ 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
     } else { 
      // User is signed out 
      Log.d(TAG, "onAuthStateChanged:signed_out"); 
     } 
     // ... 
    } 
}; 
// ... 

を、次の中Firebase接続を開始することができますdatabaseAuthVariableOverride?に気づくと、messagesノードのルートで使用したauth.uidと一致します)。

firebase.initializeApp({ 
    serviceAccount: "path/to/project-name-secrets.json", 
    databaseURL: "https://project-name.firebaseio.com", 
    databaseAuthVariableOverride: { 
    uid: "server-with-svc-acct" 
    } 
}); 

さらに詳しい情報は、documentationにも記載されています。

関連する問題