2016-05-30 16 views
3

私はすべてこのようなもので、Node.jsのをv4.4.5上で実行されている自分のOAuth 2のサーバーを持っている:Firebase 3認証+ノード+ jsonwebtoken:無効なカスタムトークン

"bcrypt-nodejs": "0.0.3", 
"body-parser": "^1.15.1", 
"cors": "^2.7.1", 
"express": "~4.1.1", 
"firebase": "^3.0.3", 
"mongoose": "^4.4.19", 
"oauth2orize": "^1.3.0", 
"passport": "^0.3.2", 
"passport-jwt": "^2.0.0", 
"passport-local": "^1.0.0" 
"jsonwebtoken": "^7.0.0" 

私はそのJWTにログインし、取得することができます、jwt.ioによると、デコードすることができますが、私は公開鍵を持っていないので、私は検証できません。

私はJWTを取得し、signInWithCustomTokenに送信し、その後、私はhttps://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=AIzaSyからエラーを取得する....私のauth.jsコントローラで

{ 
     "error": { 
     "errors": [ 
     { 
      "domain": "global", 
      "reason": "invalid", 
      "message": "INVALID_CUSTOM_TOKEN" 
     } 
     ], 
     "code": 400, 
     "message": "INVALID_CUSTOM_TOKEN" 
    } 
} 

、私はそうのようなJWTを作成してあります。

var jwt_config = require('../config/Firebase-68824d8xxxxx.json'); 

var token = jwt.sign(
    { 
     iss: jwt_config.client_email, 
     sub: jwt_config.client_email, 
     aud: 'https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit', 
     iat: iat, 
     exp: exp, 
     uid: user._id, 
     claims: { 
      username: user.username, 
      user_id: user._id, 
      roles: user.role 
     } 
    }, 
    jwt_config.private_key, 
    { 
     algorithm: 'RS256' 
    } 
); 
res.json({success: true, token: token}); 

は私がjwt_configにサービスアカウントのデータをロード

これは怒らJWTです:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJwcm9qZWN0QHByb2plY3QtODE5NTMxNDA4ODMzNzM0MzUwMy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInN1YiI6InByb2plY3RAcHJvamVjdC04MTk1MzE0MDg4MzM3MzQzNTAzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwiYXVkIjoiaHR0cHM6Ly9pZGVudGl0eXRvb2xraXQuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmlkZW50aXR5LmlkZW50aXR5dG9vbGtpdC52MS5JZGVudGl0eVRvb2xraXQiLCJpYXQiOjE0NjQ1ODIzMDEsImV4cCI6MTQ2NDY5MDMwMSwidWlkIjoiNTc0YTJmNWJmODRhZTMwOTdkMjNiZWQ1IiwiY2xhaW1zIjp7InVzZXJuYW1lIjoiamxwZWxsaWNlciIsInVzZXJfaWQiOiI1NzRhMmY1YmY4NGFlMzA5N2QyM2JlZDUiLCJyb2xlcyI6IlN0dWRlbnQifX0.gDghMzXc2sFP4XbMhrU2kxo7u0yte4PT03AbeyzT8oGLYJEHJOAY-kZT0l_fGWDi68AfVCaEiHeFj1a3-M95i4NRTQErWyGPuqqS9ii2m0mDaBseFZumk5iTTWiqY8Tpo6_7fkWGsuM7fnuXjaMKV8jkOW S913EE3DQmXHT5bwPe-KY-xTFxU0P3VPWzbgw5T5lExmzpv0x78Fr-RCy45QhfJ3IeVa-Pyhnp4_NY9VAi1naJLpwKKo7aVq3uLujMK8ViNSgfdXTqI9VNq7KrdgqSKnpdoZ2ph_J6fHBnHtAhV6F_Iy_FyC7Zg1EyC_4vMpBJuMx5UYzy6f1Gm0wvHw

私は戻ってマイルのログインページでそれを受け取るとき、私はFirebaseに送信エラーがポップアップする場所

firebase.initializeApp(config); 
$.ajax({ 
    type: 'post', 
    dataType: 'json', 
    url: 'http://ec2-52...compute.amazonaws.com:3000/api/authenticate', 
    data: $('#loginForm').serialize(), 
    complete: function(result) { 
     result = result.responseJSON; 
     // console.log(JSON.stringify(result, null, 4)); 
     var success = result.success; 
     if (success) { 
      var data = result.token; 

      firebase.auth().signInWithCustomToken(data).catch(function(error) { 
       // Handle Errors here. 
       var errorCode = error.code; 
       var data = error.message; 
       // ... 
      }); 

     } else { 
      var data = result.message; 
     } 
     $('#token').html(data); 
    } 
}); 

そしてここです。

私は困惑していますが、どうすればよいですか?

JWTを作成するために別のモジュールを調べる必要がありますか?

JWTについて特に間違っていることを知る方法はありますか?

ありがとうございます!

答えて

2

まあ、やった! 私の主張では、usernameとuser_idがオブジェクトであることが判明しました! だから、これを行うことによって:

claims: { 
    username: String(user.username), 
    user_id: Strint(user._id), 
    roles: user.role 
} 

それは動作します!

誰かがこの情報を参考にしたいと考えています。

+3

基本的に100万件の質問で判断します.Firebase 3認証システムについては、APIの回答や文書が不十分だと言うのは間違いありません。著者やメンテナーからの回答の中には、受動的に積極的に役立つものがあり、他の時には役に立たないものもあります。この問題を解決して解決策を投稿してくれてありがとう! – snakesNbronies

0

同様の状況では、サーバー側で作成されたトークンが2時間の有効期限で作成されていました。トークンを作成するときにエラーは発生しませんでした。クライアント側でトークンを使用しようとした場合のみです。有効期限を1時間に変更すると、「無効なカスタムトークン」の問題が修正されました。

関連する問題