2016-08-23 4 views
3

JWTトークンを共有することで、複数のWebサイトでユーザーを認証したいと考えています。トークンはもともとfirebaseによって生成されたものなので、それは良いトークン(jwt.ioでテストされ、うまくいくようです)と仮定します。私はuser.getToken()でそれを得る。Firebaseの独自のトークンを使用したsignInWithCustomToken()

私はsignInWithCustomToken(token)と呼んでいますが、いつもエラーauth/invalid-custom-tokenとメッセージ"The custom token format is incorrect. Please check the documentation."が表示されます。

奇妙なのは、https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken...にHTTP POST要求を行い、HTTP 400を返します。私はlocalhostとhttpsライブウェブサイトの両方で試しましたが、同じ結果です。私はFirebase 3.3を使用しています。

何が間違っている可能性がありますか?私は古いFirebaseでこの機能を使っていました。

答えて

1

あなたはコードスニペットを提供していないので、私はここで思っています。

node.jsを使用してカスタムトークンを生成しているとします。 あなたのノードのスクリプトでこれを試してみてください:

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

次に、クライアント上でクライアントがサービスアカウントが生成された同じプロジェクトに属し、同じAPIキーを使用していることを確認してくださいsignInWithCustomToken(トークン) にしてみてください。

+0

トークンはFirebase自体によって生成され、authData(firebase.user)を介して私に送信されます。コードスニペットは 'onAuthStateChanged(function(user){...})'コールバック関数の 'user.getToken()'です。つまり、トークンはカスタムではなく、Firebase独自のトークンです。 Firebase 2.xでは、この関数は 'authWithCustomToken'と呼ばれ、非カスタム(オリジナル)トークンで動作しました。 – Tom

+1

私が間違っていると私を訂正してください:あなたはfirebase idトークンでサインインしようとしています。それをしてはいけない。これはカスタムトークンではありません。 signInWithCustomTokenを介してカスタムトークンがfirebase idトークンとリフレッシュトークンに交換されます。 Firebase IDトークンを使用して別のデバイスにサインインしようとしています。それは不可能です。 – bojeil

+1

https://firebase.google.com/docs/reference/js/firebase.User#getToken誰も「IDトークン」と呼んでいませんが、https://firebase.google.com/docs/ auth/server/verify-id-tokensこれは「IDトークン」です。しかし、カスタムサーバのバックエンドがそれを検証できるのであれば、なぜFirebase自体がそれを行うことができないのですか? Docsが "Firebaseサービスへのユーザを識別するために使用されるJWTトークン"と言っているので、私はそれらの違いは分かりません。以前はFirebase 2.xで動作していました。とにかく、ありがとうございました。 – Tom

関連する問題