web-dev-qa-db-ja.com

Firebaseに対してサーバーをどのように認証しますか?

Firebaseで作成されたアプリがあります。セキュリティルールとクライアント側のコードは、アプリを機能させるのに十分ではありません。サーバーを接続していくつかのタスクを実行する必要があります。

  • onDisconnect handlers を使用してクリーンアップするのが難しい非正規化データをクリーンアップする
  • queries でできることを超えるデータの追加インデックスを構築する
38
mimming

更新(20160611): https://firebase.google.com でプロジェクトを作成した場合、サーバーからデータベースにアクセスする手順は異なります。この回答を参照してください: Firebase 3でトークンのサーバー側の検証を行うことはまだ可能ですか?

これを行うには2つの方法があります。サーバー認証トークンを生成するか、Firebaseシークレットを使用します。

サーバートークンの生成同じ トークンジェネレーターライブラリ をカスタムログイン用に作成して、使用できるトークンを生成できますサーバ。その後、セキュリティルールからこのサーバーへの特別なアクセスを提供できます。

手順は次のとおりです。

  1. サーバーの言語/プラットフォームの token generator library を取得します。 Node.jsおよびJavaサーバーが最適に動作する傾向があります。
  2. 事前に選択されたuidでトークンを生成します。 node.jsサーバーを作成している場合、コードは次のようになります。

    var FirebaseTokenGenerator = require("firebase-token-generator");
    var tokenGenerator = new FirebaseTokenGenerator("<your-firebase-secret>");
    var token = tokenGenerator.createToken(
       {uid: "my-awesome-server"}, 
       { expires: <far_into_the_future_seconds> });
    
  3. トークンを使用して、クライアントを認証します。 node.jsのコードは次のとおりです。

    var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
    ref.authWithCustomToken(token, function(error, authData) {
      ...
    });
    
  4. サーバーの言語用のクライアントがない場合、たとえばPHPの場合、REST要求として authパラメーター としてトークンを使用します。

  5. Firebase全体への読み取りアクセスを許可するこの単純なルールのように、uidで識別されるように、セキュリティルールを更新してサーバーに特別なアクセス許可を付与します。

    {
        "rules": {
            ".write": false,
            ".read": "auth.uid === 'my-awesome-server'"
        }
    }
    
  6. すべてのデータにアクセスし、素晴らしいことをします。

利点

  • これは、Firebaseがサーバーを認証するために公式に推奨する方法です。
  • サーバーは検証ルールを尊重します。
  • サーバーは単なる別のユーザーです。セキュリティルールを使用して、データへのきめ細かいアクセスを提供できます。
  • アクセスはきめ細かいので、ルートノードを削除するなど、サーバーのバグが損害を引き起こすことはほとんどありません。

Firebaseシークレット

あなたがEdgeでの生活を楽しんでいるような開発者で、一瞬で Sudo と入力した場合、Firebaseシークレットを直接使用して認証することもできます。

しかし、真剣に、これをしないでください。危ないです。

しない理由

  • Sudoを盲目的に使用するのと同じように、それは非常に危険です。
  • サーバーは検証ルールを尊重しません。
  • サーバーからFirebaseへの完全な読み取り/書き込みアクセス。 bugいバグがある場合、ビジネスにアクセスできないデータを削除または破損する可能性があります。
  • あなたのシークレットは、より多くの場所(アウトバウンドリクエストログなど)に配置されます。それが出ると、より多くのリスクにさらされます。
81
mimming