8

我的設置:如何使用Firebase令牌驗證保護我的Google Cloud Endpoints API?

  • 託管在包含使用谷歌雲終點包含上述終點生成的客戶端庫
  • Mobile客戶端應用程序創建的API谷歌App Engine的Java後端。還與Firebase進行身份驗證和數據庫集成。

我的意圖是,移動客戶端應用程序的用戶將能夠使用Firebase身份驗證登錄到移動應用程序,然後連接到任何後端API,然後進行一些處理,然後讀取或將數據寫入/從Firebase數據庫中。

爲了確保API的服務器上,我想我將不得不使用火力地堡服務器SDK的內置verifyIdToken()方法(見Verifying ID Tokens上火力地堡)解碼用戶的ID令牌從客戶端傳遞應用。由於verifyIdToken()異步運行,我如何將它與GAE中的API方法集成?我有類似到目前爲止以下的東西:在任務隊列異步運行

@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靈活環境或App Engine標準環境實現了這一目標? – gbhall

回答

7

由於這種身份驗證任務,你可以等待,直到任務結束,並繼續同步的方式,您也可以選擇添加聽衆的onSuccess,onFailure處和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

相關問題