2016-08-23 3 views
3

Ich möchte Benutzer auf mehreren Websites authentifizieren, indem ich das JWT-Token freigebe. Das Token wurde ursprünglich von Firebase generiert, also nehme ich an, es ist ein gutes und gültiges Token (getestet auf jwt.io und scheint in Ordnung zu sein). Ich bekomme es durch user.getToken().signInWithCustomToken() mit firebaseeigenen Tokens

Wie ich signInWithCustomToken(token) aufrufen bekomme ich immer einen Fehler auth/invalid-custom-token mit einer Nachricht "The custom token format is incorrect. Please check the documentation.".

Was ist seltsam, es tut eine HTTP POST-Anfrage an https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken..., die HTTP 400 zurückgibt. Ich habe sowohl auf localhost als auch auf der https Live-Website versucht ... aber das gleiche Ergebnis. Ich verwende Firebase 3.3.

Irgendwelche Ideen, was könnte falsch sein? Ich habe diese Funktion mit der alten Firebase verwendet.

Antwort

1

Sie liefern keine Code-Schnipsel, also werde ich hier spekulieren.

Ich nehme an, dass Sie node.js verwenden, um das benutzerdefinierte Token zu generieren. Versuchen Sie dies in Ihrem Knoten Skript:

var firebase = require("firebase"); 
var adminConfig = { 
    serviceAccount: "serviceAccountCredentials.json" 
}; 
var adminApp = firebase.initializeApp(adminConfig, 'admin'); 
var token = adminApp.auth().createCustomToken('12345678', { 
    customField: 'customValue' 
}); 

dann auf dem Client versuchen, signInWithCustomToken (Token) Sicherstellen, dass der Client den gleichen API-Schlüssel verwendet, die zu dem gleichen Projekt gehört, wo das Dienstkonto generiert wurde.

+0

Danke, aber ich erzeuge das Token nicht, das Token wird von Firebase selbst generiert und über die authData (firebase.user) an mich gesendet. Das Code-Snippet ist 'user.getToken()' in der 'onAuthStateChanged (function (user) {...})' Callback-Funktion. Also ist das Token nicht benutzerdefiniert, es ist das eigene Token der Firebase. In Firebase 2.x hieß die Funktion 'authWithCustomToken' und arbeitete mit nicht-benutzerdefinierten (originalen) Token. – Tom

+1

Korrigieren Sie mich, wenn ich falsch liege: Sie versuchen, sich mit einem Firebase-ID-Token anzumelden. Das kannst du nicht tun. Dies ist kein benutzerdefiniertes Token. Benutzerdefinierte Tokens werden über signInWithCustomToken gegen ein Firebase-ID-Token und ein Aktualisierungstoken ausgetauscht. Sie versuchen, den Firebase-ID-Token zu verwenden, um sich in einem separaten Gerät anzumelden, das ich vermute. Das ist nicht möglich. – bojeil

+1

In https://firebase.google.com/docs/reference/js/firebase.User#getToken nennt niemand es "ID-Token", aber Sie haben Recht, dass in https://firebase.google.com/docs/ auth/server/verify-id-token es ist ein "ID-Token". Wenn jedoch ein benutzerdefiniertes Server-Back-End dies verifizieren kann, kann Firebase selbst dies nicht tun. Ich sehe keinen Unterschied zwischen ihnen, da die Dokumentation sagt "JWT-Token verwendet, um den Benutzer zu einem Firebase-Dienst zu identifizieren". Früher funktionierte es in Firebase 2.x. Wie auch immer, danke für deine Hilfe. – Tom