web-dev-qa-db-fra.com

Comment authentifiez-vous un serveur auprès de Firebase?

J'ai une application écrite sur Firebase. Les règles de sécurité et le code côté client ne suffisent pas à faire fonctionner mon application. J'ai besoin de connecter un serveur pour effectuer quelques tâches:

  • Nettoyage des données dénormalisées difficiles à nettoyer à l'aide de gestionnaires onDisconnect
  • Construire des index supplémentaires de mes données qui vont au-delà de ce que je peux faire avec requêtes
38
mimming

Mise à jour (20160611): si vous avez créé votre projet sur https://firebase.google.com , les étapes d'accès à la base de données depuis un serveur sont différentes. Voir cette réponse: Est-il toujours possible de faire une vérification côté serveur des jetons dans Firebase 3?

Vous pouvez procéder de deux manières: Générez un jeton d'authentification de serveur ou utilisez un secret Firebase.

Générez un jeton de serveur Vous pouvez utiliser les mêmes bibliothèques de générateur de jetons créées pour la connexion personnalisée pour générer des jetons que vous pouvez utiliser à partir de votre serveur. Vous pouvez ensuite fournir un accès spécial à ce serveur à partir de vos règles de sécurité.

Voici les étapes:

  1. Obtenez la bibliothèque du générateur de jetons pour la langue/plate-forme de votre serveur. Node.js et Java ont tendance à fonctionner le mieux.
  2. Générez un jeton avec un uid présélectionné. Si vous écrivez un serveur node.js, le code pourrait ressembler à ceci:

    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. Utilisez le jeton pour authentifier votre client. Voici plus de code node.js:

    var ref = new Firebase("https://<your-firebase>.firebaseio.com/");
    ref.authWithCustomToken(token, function(error, authData) {
      ...
    });
    
  4. S'il n'y a pas de client pour la langue de votre serveur, par exemple PHP, utilisez le jeton pour vos demandes REST comme paramètre auth .

  5. Mettez à jour vos règles de sécurité pour accorder des autorisations spéciales à votre serveur, comme identifié par l'uid, comme cette règle simple qui permet un accès en lecture à l'ensemble de Firebase

    {
        "rules": {
            ".write": false,
            ".read": "auth.uid === 'my-awesome-server'"
        }
    }
    
  6. Accédez à toutes les données, faites des choses impressionnantes.

Avantages

  • Il s'agit de la méthode officiellement recommandée par Firebase pour authentifier votre serveur.
  • Votre serveur respectera les règles de validation.
  • Le serveur n'est qu'un autre utilisateur. Vous pouvez utiliser des règles de sécurité pour fournir un accès fin à vos données.
  • Étant donné que l'accès est fin, il est peu probable qu'un bogue sur votre serveur provoque des dommages, comme la suppression de votre nœud racine.

Secret Firebase

Si vous êtes le genre de développeur qui aime vivre sur Edge, et que vous tapez Sudo en un clin d'œil, vous pouvez également vous authentifier en utilisant votre secret Firebase directement.

Mais sérieusement, ne fais pas ça. C'est dangereux.

Raisons de ne pas le faire

  • Tout comme en utilisant aveuglément Sudo, c'est incroyablement dangereux.
  • Votre serveur ne respectera pas vos règles de validation.
  • Votre serveur dispose d'un accès complet en lecture/écriture à votre Firebase. S'il a un bogue assez laid, il peut supprimer ou corrompre des données auxquelles aucune entreprise n'a accès.
  • Votre secret se retrouve dans plus d'endroits (potentiellement dans les journaux des demandes sortantes, etc.). Vous êtes exposé à plus de risques s'il sort.
81
mimming