2016-11-17 7 views
1

私はサーバーにカスタムトークンを生成して検証しようとしています。ファイアウォールの認証トークンを私のアプリ全体で再利用して、APIのセキュリティを確保したいと考えています。com.google.firebase.auth.FirebaseAuthException:トークンはこのアプリケーション用ではありません

私はFirebaseのドキュメントからこのコードを取得しています。 Creating Custom Token、Imはなって何Verifying ID Token

FirebaseOptions options = new FirebaseOptions.Builder() 
     .setServiceAccount(sce.getServletContext().getResourceAsStream("/WEB-INF/serviceAccountKey.json")) 
     .setDatabaseUrl("https://[project-id].firebaseio.com/") 
     .build(); 

FirebaseApp.initializeApp(options); 

final AtomicBoolean done = new AtomicBoolean(false); 

FirebaseAuth.getInstance().createCustomToken("the-great-uid") 
     .addOnSuccessListener(new OnSuccessListener<String>() { 
      @Override 
      public void onSuccess(String customToken) { 

       FirebaseAuth.getInstance().verifyIdToken(customToken) 
         .addOnFailureListener(new OnFailureListener() { 
          @Override 
          public void onFailure(Exception excptn) { 
           LOG.log(Level.SEVERE, "fail verification", excptn); 
           done.set(true); 
          } 
         }) 
         .addOnSuccessListener(new OnSuccessListener<FirebaseToken>() { 
          @Override 
          public void onSuccess(FirebaseToken decodedToken) { 
           String uid = decodedToken.getUid(); 
           LOG.log(Level.INFO, "SUCCESS VERIFICATION: "); 
           LOG.log(Level.INFO, "UUDI: {0}", uid); 
           done.set(true); 
          } 

         }); 

       LOG.log(Level.INFO, "Custom token: {0}", customToken); 
       done.set(true); 
      } 
     }); 

while (!done.get()); 

[INFO] INFO: Custom token: eyJhbGciOiJSUzI1NiJ9.eyJ****** 
[INFO] After custom token 
[INFO] Nov 17, 2016 3:15:27 PM com.adslide.backend.listeners.AdslideContextListener$1$2 onFailure 
[INFO] com.google.firebase.auth.FirebaseAuthException: Token is not for this app 
[INFO] at com.google.firebase.auth.internal.FirebaseTokenVerifier.verifyTokenAndSignature(FirebaseTokenVerifier.java:52) 
[INFO] at com.google.firebase.auth.FirebaseAuth$1.call(FirebaseAuth.java:150) 
[INFO] at com.google.firebase.auth.FirebaseAuth$1.call(FirebaseAuth.java:144) 
[INFO] at com.google.firebase.tasks.Tasks$1.run(Tasks.java:63) 
[INFO] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[INFO] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[INFO] at com.google.appengine.tools.development.BackgroundThreadFactory$1$1.run(BackgroundThreadFactory.java:60) 

は、私が何かを逃しましたか?私はGoogle Appengineを使用しています。正しいと仮定してください。project-idserviceAccountKey.json

答えて

4

誰もこのショットを出そうとしていないので、私は、この問題でも出会ったかもしれない誰かのために、私が見つけたものを共有したいと思います。

Firebase documentationの警告が表示されませんでした。

警告:Firebase Admin SDKに含まれるIDトークンの確認方法は、Admin SDKで作成したカスタムトークンではなく、クライアントSDKのIDトークンを検証するためのものです。詳細については、Authトークンを参照してください。

これは、私がAdmin SDKで生成したトークンを検証しているため、上記のことが有効でないことを意味します。

関連する問題