La réponse courte est oui. La réponse est que, dans la plupart des cas, nous avons un plus outil approprié maintenant. Donc, cela dépend beaucoup de l'utilisation le cas où vous essayez de résoudre.
La nouvelle version du SDK est un peu plus puissant, et nous n'avons pas fait un grand travail de résumer les capacités. Cela semble être un bon endroit pour le contraste les outils disponibles et leurs utilisations, et puis je vais virer de bord sur certains tiers (c'est à dire Aller) les notes à la fin.
À l'aide d'un outil d'authentification pour l'authentification du client
La principale utilisation de la frappe des jetons personnalisés est de permettre aux utilisateurs de s'authentifier sur un externe/legacy auth mécanisme de contrôle, telles que votre serveur LDAP. Le processus de base pour ce qui est abordé ici: iOS, Android, Web.
Essentiellement, votre service à la menthe le JWT jeton et l'envoie au client. Le client ne la vérification et l'authentification à l'aide de la coutume de jeton que vous fournissez.
Authentification de votre privilégiée des travailleurs
Il n'est plus nécessaire d'utiliser des jetons personnalisés pour authentifier votre processus de serveur. Ceci est fait par la création d'un compte de service, qui est couvert étape-par-étape de l'Ajout de Firebase pour votre Serveur. Lorsque vous avez terminé, vous vous retrouverez avec un fichier JSON qui contient une clé privée.
Ensuite, vous insérez votre compte du service d'identification par référence à cet JSON à l'aide de l' serviceAccount
d'attribut en firebase.initializeApp()
, et vous êtes dans! C'est documenté ici et ressemble à ceci (voir le lien pour la version Java):
var firebase = require("firebase");
// Initialize the app with a service account, granting admin privileges
firebase.initializeApp({
databaseURL: "https://databaseName.firebaseio.com",
serviceAccount: "./serviceAccountCredentials.json"
});
L'émulation des utilisateurs ou la limitation de l'accès à partir d'un serveur de processus
Il est assez trivial pour émuler un utilisateur ou à limiter l'accès (fortement recommandé) à partir d'un processus de serveur. Vous n'avez pas vraiment besoin de menthe un token personnalisé pour ce plus.
Cela nécessite juste l'ajout de l' databaseAuthVariableOverride
dans votre appel à l' database.initializeApp()
:
firebase.initializeApp({
databaseURL: "https://databaseName.firebaseio.com",
serviceAccount: "./serviceAccountCredentials.json",
databaseAuthVariableOverride: {
uid: "my-service-worker-or-user-uid"
}
});
La validation de l'identité du client via la sécurité
Tout d'abord, vous pouvez généralement éviter de traiter avec le côté serveur de vérification si vous utilisez Firebase Base de données, en ayant votre client en écriture à la base de données et à l'aide de règles de sécurité pour valider leur identité. Si votre serveur écoute sur un chemin qui requiert une authentification à écrire, alors c'est déjà résolu sans aucune spéciales de sécurité sur le serveur.
Par la modélisation de cette comme un événement de la file d'attente, il crée un simple, modulaire et évolutif serveur travailleur de la stratégie. Voir firebase-file d'attente pour certains grands Node.js outils. Il prend en charge 3.x.
La vérification d'identification de client jetons sur le serveur
Si vous n'utilisez pas le temps réel de la Base de données et la nécessité de recevoir des clients jetons (par exemple via des appels de REPOS) et vérifiez qu'ils sont valides, vous pouvez le faire en utilisant verifyIdToken()
comme décrit ici. Ce serait semblable à la suivante:
auth.verifyIdToken(idToken).then(function(decodedToken) {
var uid = decodedToken.sub;
});
Ensuite, si vous voulez authentifier en tant qu'utilisateur d'écrire dans la base de données et à renforcer la sécurité, vous devez utiliser l' Émulation des Utilisateurs de la section ci-dessus. En d'autres termes, appelez - initializeApp()
avec un databaseAuthVariableOverride
à la uid.
Notez que, si vous essayez d'appeler initializeApp()
plusieurs fois et de rencontrer un message d'erreur similaire à la suivante: Error: Firebase App named '[DEFAULT]' already exists.
Vous pouvez initialiser app multiples contextes par l'ajout d'un deuxième argument à la initializeApp() appel (par exemple, database.initializeApp({...}, 'asUser'+uid)
), puis de référence que l'instance de l'application en utilisant firebase.database('asUser'+uid)
.réf(...). Pour en savoir plus sur l'utilisation de plusieurs app instances, regardez ici.
Code Java disponibles sur les liens ci-dessus. Aller tiers et les solutions ci-dessous.
La création d'un jeton pour une utilisation dans l'API REST
Michael Bleigh couvert ce scénario ici et mérite quelques rep pour travailler cela.
La création de jetons ou d'en vérifier eux par le biais de REPOS
Ce n'est pas pris en charge. Désolé.
Golang et les autres: à venir
Nous travaillons sur un Aller jeton de frappe et de la vérification de la bibliothèque. Nous allons également ajouter des outils Python pour ce dès que bien. Pas de date de sortie ou stades pour cela. Dans le même temps, si vous souhaitez vérifier l'ID client jetons sans l'aide de l'officiel Firebase Node.js ou de bibliothèques Java (qui ont intégré les méthodes de vérification), vous devez vous assurer que l'ID de jeton (ce qui est JWT) est conforme à la suivante:
- Son décodé en-tête a un
alg
(algorithme) de revendiquer l'égalité d' "RS256"
.
- Son décodé charge utile a un
aud
(public) de revendiquer l'égalité pour votre Firebase ID de projet.
- Son décodé charge utile a un
iss
(émetteur) la revendication de l'égalité à l' "https://securetoken.google.com/<projectId>"
.
- Son décodé charge utile a une chaîne non vide
sub
(sous réserve) de la réclamation. Notez que c'est l' uid
pour que Firebase de l'utilisateur.
- Son décodé en-tête a un
kid
(key ID) de la réclamation qui correspond à l'une des clés publiques énumérées à l' https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com
.
- Vous devez également utiliser une librairie JWT pour vérifier le jeton de clé publique pour prouver le jeton a été signé avec le public des clés de la clé privée correspondante.
Pour y Aller, il semble que vous pouvez utiliser jwt-go
de décoder et de valider le client ID de jeton.