2016-05-21 11 views
4

firebase 3.0を使用してnode.jsサービスを開発しています。これはfirebase 2.4を使用するWebアプリケーションによって呼び出されます。Firebase 3.0トークン:[エラー:Firebase Auth IDトークンに "kid"クレームがありません]

私は、ヘッダの呼び出しで、現在のユーザーFirebase ID tokenAuth.$getAuth().token)を送信し、

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); 
}); 

でこのトークンをvalidadeしようとしている。しかし、私は取得していますよ:

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

getAuth():

enter image description here


UPDATE

I'haveだけテスト生成を、サーバ側でトークンを検証して、私は同じ問題を取得しています。

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); 
}); 

お勧めはありますか?


UPDATE 2:私の場合【解決手段】

問題AngularFire 2.X.Xで生成されたトークンは、自分のサーバーで実行されているFirebase 3.X.Xとの互換性がないということでした。だから、人々はここに書いて、this google group topicに回避策は次のようにjsonwebtokenを使用していたことをいくつかの考えを掘り下げる後: - > [プロジェクトの設定 -

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

あなたはfbKeyが新しいfirebaseコンソールにアクセスし、設定に行くを見つけることができます>データベース

+0

からコピー

。このような異なるバージョンで作成されたトークンを混在させることはできません。ユーザーとしてサーバー上で認証しようとするのではなく、認証されたユーザーがデータベース内の安全なパスに書き込むようにします。サーバーにパスを監視させます。その後、RESTfulサービスとセキュリティをスキップすることができます(認証が必要なセキュリティ保護されたパスに書き込むことができれば、認証され、検証されます)。したがって、この完全な混乱を回避することができます。 – Kato

+0

@Kato nice。しかし、それは厄介です。私はここで、サーバー側で単純なトークンを生成し、同じ 'verifyIdToken'を使ってトークンを検証し、同じエラーを取得しようとするテストを行いました。それは互換性の問題と思われません。とにかく、あなたはデータベースの安全なパスについて言及したことを設定する例を持っていますか? – adolfosrs

+1

私もこの問題を抱えて、自分のようにサーバーのテストを試みました。ここで私の質問を参照してください - [Error:Firebase Auth IDトークンにFirebase 3.0の "kid"クレームがない] [1] [1]:https://groups.google.com/forum/#!topic/firebase-talk/ajMAi1RSsMA (紛らわしい)createCustomTokenによって生成されたトークンは、verifyIdTokenに渡されたものと同じではありません。 –

答えて

2

Firebase IDトークンはカスタムトークンと同じではなく、verifyIdToken()はgenerateCustomToken()で生成されたトークンを検証するためのものではありません。

古いスタイルのカスタムトークンはまだ機能しているようです(サービスアカウントの秘密鍵ではなくデータベースの秘密鍵で署名されています)。 firebase-token-generator.jsおよび/またはjsonwebtoken.jsを使用して、自分自身を生成して検証することができます。 3.0を使用して鋳造されたトークンのようには見えませんFirebaseプロジェクト]> [設定]> [データベース]> [秘密

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

3

firebaseのcreateCustomTokenとverifyIdTokenをカップルで使用する方法がないようです。

メソッドcreateCustomTokenは、デフォルトでjwtのヘッダーセクションに "kid"クレームを入れていないjsonwebtokenモジュールのメソッド記号を使用します。 createCustomTokenはそれ自体を置くわけではありません。

この時点では、jsonwebtokenモジュールを直接使用して、独自のキーIDを持つトークンを生成することができます。

[email protected]

[email protected]

+0

返信ありがとうございます。ソリューションに関する詳細はもう少しで質問を更新しました。 – adolfosrs

2

ご使用のサーバーに渡すトークンは、JWTのトークンではなく、verifyIdTokenはJWTトークンを必要としています。

WebアプリケーションでJWTトークンを取得するには、firebase.app().auth().currentUser.getToken()を実行してください。

私は個人的に私はアングラファイアを削除しましたが、基本的なファイアベースフレームワークは、私の意見では、まったく役に立たないようでした。さらに、ファイヤーベース3.0との互換性のあるバージョンはまだリリースされていません。恐らくthe next week according to the firebase teamにあります。

関連する問題