8

マイセットアップ:GoogleのApp Engineは、上述のエンドポイント用に生成されたクライアントライブラリを含む Firebaseトークン検証でGoogle Cloud Endpoints APIを保護するにはどうすればよいですか?

  • モバイルクライアントアプリケーションをGoogleクラウドエンドポイントを使用して作成されたAPIを含む上でホストされている

    • のJavaバックエンド。また、認証とデータベース用にFirebaseと統合されています。

    モバイルクライアントアプリケーションのユーザーは、Firebase認証を使用してモバイルアプリにログインし、次にバックエンドAPIのいずれかに接続して処理を行い、次に読み取りますFirebaseデータベースとの間でデータの書き込みや書き込みができます。

    サーバにAPIを保護するために、Firebase Server SDKの組み込みverifyIdToken()メソッド(FirebaseのVerifying ID Tokensを参照)を使用して、クライアントから渡されたユーザのIDトークンをデコードする必要があると思います応用。 verifyIdToken()は非同期で実行されるため、GAEのAPIメソッドとどのように統合しますか? 、ONFAILUREを

    @ApiMethod(name = "processAndSaveToDB", httpMethod = "post") 
        public Response processAndSaveToDB(@Named("token") String token) { 
    
         Response response = new Response();   
    
         // Check if the user is authenticated first 
         FirebaseAuth.getInstance().verifyIdToken(idToken) 
          .addOnSuccessListener(new OnSuccessListener() { 
           @Override 
           public void onSuccess(FirebaseToken decodedToken) { 
            String uid = decodedToken.getUid(); 
    
            // do bulk of processAndSaveToDB() method 
    
           }) 
          .addOnFailureListener(new OnFailureListener() { 
           @Override 
           public void onFailure(Exception e) { 
    
            // throw unauthorized exception 
    
          }); 
    
        return response; 
    } 
    
  • +0

    App Engine Flexible EnvironmentまたはApp Engine Standard Environmentを使用してこれを達成しましたか? – gbhall

    答えて

    7

    この認証タスクがタスクキューに非同期に実行されているとして、あなたは、必要に応じて、あなたがリスナーにするonSuccessを追加することができ、そのタスクが終了するまで待ってから、同期の方法で続けることができます:私はこれまでのところ、以下のようなものを持っていますとonComplete。

    Task<FirebaseToken> authTask = FirebaseAuth.getInstance().verifyIdToken(idToken) 
    .addOnSuccessListener(new OnSuccessListener() { 
         @Override 
         public void onSuccess(Object tr) {//do smtg } 
        }).addOnFailureListener(new OnFailureListener() { 
         @Override 
         public void onFailure(Exception excptn) {//do smtg } 
        }).addOnCompleteListener(new OnCompleteListener() { 
         @Override 
         public void onComplete(Task task) {//do smtg } 
        }); 
        try { 
         Tasks.await(authTask); 
        } catch(ExecutionException | InterruptedException e){ 
         //handle error 
        } 
        FirebaseToken decodedToken = authTask.getResult(); 
    
    +0

    これはすばらしい、ありがとう! – user2181948

    関連する問題