2016-12-09 3 views
0

Ich habe eine grundlegende App mit Java, Google Web Toolkit und Google Cloud Datastore geschrieben. Zur Authentifizierung verwende ich Firebase. Wenn das Front-End einen RPC-Aufruf ausführt, übergibt es das Benutzer-Token, damit das Back-End es überprüfen kann.Wie sollte ich Firebase-Backend-Authentifizierung behandeln?

Ich möchte eine VerifyToken-Klasse im Back-End erstellen, die ein Benutzer-Token erhalten wird, rufen Sie die Firebase verifyIdToken zu überprüfen, dann die Benutzer-UID oder 0 zurückgegeben, wenn das Benutzer-Token nicht erfolgreich verifiziert wurde. Die Klasse, die den RPC-Aufruf empfängt, verwendet dann die UID, um Daten abzurufen und sie in der RPC-Antwort zurückzugeben.

Hier ist der aktuelle Code:

public class VerifyToken 
{ 
    public String verify(String token) 
    { 
     String uid = "0"; 

     try 
     { 
      //Connect to Firebase 
      FirebaseOptions options = new FirebaseOptions.Builder() 
         .setServiceAccount(new FileInputStream("firebaseJsonHere")) 
         .setDatabaseUrl("dbUrlHere") 
         .build(); 

      FirebaseApp.initializeApp(options); 

      //Verify the token 

      FirebaseAuth.getInstance().verifyIdToken(token) 
      .addOnSuccessListener(new OnSuccessListener<FirebaseToken>() { 
       @Override 
       public void onSuccess(FirebaseToken decodedToken) { 
        String uid = decodedToken.getUid(); 
        System.out.println("uid decoded = " + uid); 
       } 
      }).addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(Exception e) 
       { 
        System.out.println(e.getMessage()); 
       } 
      });   

     }catch(Exception e){ 
      System.out.println("Exception: " + e.getMessage()); 
     } 

     //Return the uid or 0 if not validated 
     return uid; 
    } 
} 

Bitte könnte jemand lassen Sie mich wissen, wie das Ergebnis aus der SuccessListener zu bekommen. Ich kann sehen, dass die UID erfolgreich decodiert wurde, nur nicht sicher, wie man das Ergebnis zurückbekommt.

Vielen Dank, Ed

+0

Danke, jetzt die Antwort hier gefunden: [http://stackoverflow.com/questions/38418472/how-do-i-secure-my-google-cloud-endpoints-apis-with-firebase-token-verification/ 38423163 # 38423163] (http://stackoverflow.com/questions/38418472/how-do-i-secure-my-google-cloud-endpoints-apis-with-firebase-token-verification/38423163#38423163) –

Antwort

0

Ich denke, Sie tun können:

public String verify(String token) 
{ 
    String uid = "0"; 

    try 
    { 
     //Connect to Firebase 
     FirebaseOptions options = new FirebaseOptions.Builder() 
       .setServiceAccount(new FileInputStream("firebaseJsonHere")) 
       .setDatabaseUrl("dbUrlHere") 
       .build(); 

     FirebaseApp.initializeApp(options); 

     //Verify the token 

     FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(token).getResult(); 
     uid = decodedToken.getUid(); 

    }catch(Exception e){ 
     System.out.println("Exception: " + e.getMessage()); 
    } 

    //Return the uid or 0 if not validated 
    return uid; 
} 

Ich bin kein großer Fan von String uid = "0"; aber es null stattdessen klingt besser zu mir setzen.

Verwandte Themen