2014-04-19 1 views
0

Je souhaite configurer une base de données Firebase pour qu'elle n'accepte que les connexions de mon application iOS. Je n'ai aucun problème à configurer des règles pour gérer l'accès des utilisateurs authentifiés, etc ..., mais je veux savoir quelle est la meilleure approche pour empêcher les connexions d'autres applications que la mienne.Comment configurer les règles de sécurité Firebase pour accepter uniquement les connexions d'une application iOS

Comment puis-je faire cela?

Pour être plus concret au cas de l'utilisateur. Mon application est un service et les utilisateurs peuvent s'inscrire pour l'utiliser en s'authentifiant avec Twitter et Facebook. Les utilisateurs paieront pour le service, et l'application utilisera Firebase comme backend, ce qui signifie que je paierai pour le service Firebase. Les utilisateurs me paient, et je paie Firebase. C'est la raison pour laquelle je veux seulement que mon application soit la seule qui connecte et utilise la base de données Firebase. Et je pense que c'est le cas le plus courant. D'autres services backend comme Parse, vous permettent de le faire en utilisant une clé secrète lorsque l'application se connecte.

+0

Pouvez-vous expliquer le cas d'utilisation pour cela? Plus précisément, si un utilisateur possède des informations d'identification d'authentification valides, pourquoi l'endroit où il se connecte importe-t-il? Cela ressemble étrangement à "comment empêcher les choses dans le nuage d'être dans le nuage". Comprendre cela devrait aider à réduire la portée de la réponse. – Kato

+0

Les données stockées dans Firebase ont été conservées et sont destinées à être utilisées par l'application iOS. Ces données font partie de la valeur que l'application iOS donne à ses utilisateurs, et pour cela, il n'est pas accessible depuis n'importe où. – vicentevicens

+0

Et y a-t-il des moyens qu'un serveur dans le nuage peut utiliser pour s'assurer qu'une demande est reçue d'une application par rapport à un navigateur, autre que la signature du navigateur (qui peut bien sûr être truquée)? Je peux fournir la partie Firebase pour sécuriser les données, mais je ne peux pas vous dire comment un service Web peut garantir qu'un périphérique connecté est d'un type ou d'un autre. – Kato

Répondre

4

Si je comprends bien la question, les critères sont les suivants:

  1. vous offrir une application achetables qui donne accès aux données de la prime
  2. devraient pouvoir lire ne sera attribué clients que les données
  3. il est possible pour les utilisateurs de se connecter avec FirebaseSimpleLogin sans télécharger votre application
  4. Vous voulez empêcher cette

En supposant que tout cela est correct, je vois deux réponses rapides:

Créez vos propres jetons auth

Depuis FirebaseSimpleLogin est disponible à partir dans le nuage, vous ne serez pas en mesure d'empêcher les utilisateurs d'authentifier basé sur l'appareil. Mais FirebaseSimpleLogin est juste un wrapper sur le token generator, donc rien ne vous arrête de generating your own.

#!/usr/bin/env node 

var FirebaseTokenGenerator = require("firebase-token-generator"); 
var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET); 

if(validateUserIsFromiOSApp()) { 
    var token = tokenGenerator.createToken({id: userId}); 
} 

function validateUserIsFromiOSApp() { /* ??? */ } 

Maintenant, on peut simplement désactiver la connexion simple et les utilisateurs auront aucun moyen d'authentifier sans obtenir au préalable un jeton valide de votre service. Les règles de sécurité ici sont la propriété, mais contiendraient quelque chose comme ceci:

".read": "auth.uid !== null" 

Avec un peu de créativité, selon le cas d'utilisation pour exiger twitter/facebook auth, vous pourriez être en mesure de contourner l'ensemble du processus auth simplement en ayant la L'application demande un jeton lorsqu'elle s'enregistre et ne force jamais l'utilisateur à s'authentifier.

En utilisant des méta-données en liaison avec connexion simple,

Bien sûr, connexion simple est par définition simple, et ne nécessite pas un processus serveur.Vous pouvez utiliser ce en stockant les informations que les utilisateurs ont acheté votre application:

  1. app achats utilisateur du magasin
  2. lors de la réception de la transaction, vous stockez ID utilisateur et acheter record Firebase
  3. utilisation simple connexion auth comme d'habitude
  4. ajouter une règle de sécurité pour assurer l'utilisateur a acheté l'application

la règle de sécurité ressemblerait à quelque chose comme ceci:

".read": "root.child('purchase_receipts/'+auth.uid).exists()" 

Lectures complémentaires:

Questions connexes