2016-05-21 10 views
4

Ich entwickle gerade einen node.js Dienst mit Firebase 3.0, der von einer Webanwendung aufgerufen wird, die Firebase 2.4 verwendet.Firebase 3.0 Token: [Fehler: Firebase Auth ID Token hat keinen "kid" Anspruch]

Ich schicke den aktuellen Benutzer Firebase ID token (Auth.$getAuth().token) in meinem Kopf Anruf und versucht, dieses Token validade mit

var idToken = req.headers["x-access-token"]; 
auth.verifyIdToken(idToken).then(function(decodedToken) { 
    var uid = decodedToken.sub; 
    console.log(decodedToken); 
}, function(error){ 
    console.log(error); 
}); 

Aber ich bin immer:

[Error: Firebase Auth ID token has no "kid" claim] 

getAuth():

enter image description here


UPDATE

I'have gerade getestet Erzeugen und das Token auf der Serverseite Validierung und ich das gleiche Problem bekommen.

var auth = firebase.auth(); 
var token = auth.createCustomToken(userId, {"premium_account": true}); 
console.log(token); 
auth.verifyIdToken(token).then(function(decodedToken) { 
    console.log(decodedToken); 
}, function(error){ 
    console.log(error); 
}); 

Irgendwelche Vorschläge?


UPDATE 2: [SOLUTION]

Das Problem war in meinem Fall, dass der mit AngularFire 2.X.X erzeugten Tokens ist nicht kompatibel mit dem Firebase 3.X.X, die in meinem Server laufen. So, nachdem in einigen Gedanken zu graben, dass die Leute hier geschrieben und in this google group topic die Abhilfe war jsonwebtoken wie folgt zu verwenden:

var jwt = require('jsonwebtoken'); 
jwt.verify(idToken, fbKey, function(err, decoded) { 
    if (!err){ console.log(decoded); } 
}); 

Sie finden die fbKey die neue Feuerbasis Konsole Zugriff auf und gehen in Einstellungen -> Projekteinstellungen -> Datenbank.

+0

Das ist nicht wie ein Token geprägt 3.0 unter Verwendung aussieht. Du kannst Token, die von verschiedenen Versionen geprägt sind, nicht mischen und vergleichen. Versuchen Sie nicht, sich auf dem Server als Benutzer zu authentifizieren, sondern Ihre authentifizierten Benutzer in einen sicheren Pfad in der Datenbank zu schreiben. Lassen Sie den Server den Pfad überwachen. Dann können Sie die RESTful-Dienste und die Sicherheit überspringen (wenn sie in einen gesicherten Pfad schreiben können, der Authentifizierung benötigt, werden sie authentifiziert und verifiziert). So können Sie diese ganze Unordnung umgehen. – Kato

+0

@Kato nett. Aber das ist seltsam. Ich habe hier einen Test gemacht, der versucht, ein einfaches Token auf der Serverseite zu erzeugen und das gleiche 'verifyIdToken' zu verwenden, um das Token zu validieren und den gleichen Fehler zu bekommen. Es scheint kein Kompatibilitätsproblem zu sein. Wie auch immer, haben Sie ein Beispiel dafür, was Sie gerade über den gesicherten Pfad in der Datenbank erwähnt haben? – adolfosrs

+1

Ich hatte auch dieses Problem und versuchte den Server wie Sie testen. Siehe meine Frage hier - [Fehler: Firebase Auth ID Token hat keine "kid" Anspruch mit Firebase 3.0] [1] [1]: https://groups.google.com/forum/#!topic/firebase-talk/ajMAi1RSsMA Sieht aus wie (verwirrenderweise) das Token, das von createCustomToken generiert wird, ist nicht das gleiche Token, das an verifyIdToken übergeben wird. –

Antwort

2

Die Dokumentation besagt, dass ein Firebase-ID-Token nicht mit einem benutzerdefinierten Token übereinstimmt und dass verifyIdToken() nicht zum Verifizieren von Token dient, die mit generateCustomToken() generiert wurden.

Im alten Stil benutzerdefinierte Token scheinen immer noch zu funktionieren (mit einem Datenbankgeheimnis anstelle eines privaten Schlüssels des Dienstkontos signiert). Sie können diese selbst mit fireBase-token-generator.js und/oder jsonwebtoken.js erzeugen und verifizieren.

von Firebase Projekt kopiert> Einstellungen> Datenbank> Secrets

Create custom database authentication tokens using a legacy Firebase token generator. At least one secret must exist at all times.

3

Scheint so, als gäbe es keine Möglichkeit, Firebase createCustomToken und verifyIdToken in einem Paar zu verwenden.

Methode createCustomToken verwendet Methode Zeichen von jsonwebtoken Modul, die nicht "kid" Anspruch in Header-Abschnitt von JWT standardmäßig setzen. Und createCustomToken setzt es nicht selbst.

Ich nehme an, zu diesem Zeitpunkt können Sie jsonwebtoken Modul direkt verwenden, um Token mit eigener Schlüssel-ID zu generieren.

[email protected]

[email protected]

+0

Danke für die Antwort. habe die Frage nur mit einigen weiteren Details zur Lösung aktualisiert. – adolfosrs

2

Das Token Sie Ihren Server übergeben ist kein JWT Token und verifyIdToken ein JWT Token benötigen.

Um ein JWT-Token in Ihrer Webanwendung zu erhalten, führen Sie firebase.app().auth().currentUser.getToken().

Persönlich habe ich angularfire entfernt, das grundlegende Firebase-Framework gemacht angularfire meiner Meinung nach ziemlich nutzlos. Außerdem ist eine kompatible Version mit Firebase 3.0 von angularfire noch nicht veröffentlicht, wahrscheinlich in the next week according to the firebase team.

Verwandte Themen