wake-up-neo.com

Wie authentifiziere ich einen Ruheanruf in der Firebase?

Ich möchte mit einigen Benutzern, die durch eine Regel geschützt sind, einen Restanruf für einige Daten durchführen. Ich muss also das Token für meine Anfrage verwenden. Abhängig von der Version der Firebase-Dokumentation gibt es unterschiedliche Möglichkeiten: alte und veraltete Methode ( https://www.firebase.com/docs/rest/api/ ): 

'https://samplechat.firebaseio-demo.com/users/jack/name.json?auth=<TOKEN>'

neue Weise und ich zitiere das Dokument ( https://firebase.google.com/docs/reference/rest/database/user-auth#section-get ): 

Verwendung des Zugriffstokens Die Database REST - API akzeptiert access_token = für die Abfragezeichenfolge oder den Header Authenticate: Bearer, um eine Anforderung mit einem Dienstkonto zu authentifizieren.

'https://samplechat.firebaseio-demo.com/users/jack/name.json?access_token=<TOKEN>'

die neue Methode funktioniert für mich nicht, auch wenn ich die neue Firebase-Konsole verwendet habe, als ich sie eingerichtet habe, und selbst wenn das Token, das ich verwende, mit dem neuen Firebase-SDK generiert wird. Weiß jemand, warum nur der veraltete Weg funktioniert? Ich war daran interessiert, das Token in den Header meiner Anfragen zu setzen, kann es aber nicht.

15
drevlav

Für Java: Ich habe versucht, mit auth auf DatabaseRealtime zuzugreifen. Lauf: 

curl 'https://PROJECT_ID.firebaseio.com/users.json?auth=DATABASE_SECRET'

Es funktionierte aber auf diese Weise nicht mehr. 
Danach versuchte ich, access_token Zu verwenden. Ich traf ein Problem, wenn mit access_token die Datenbank in meinem Firebase-Projekt abgefragt wurde Ich habe bereits die Hauptursache für Fehler gefunden Ich habe mich vorher getroffen. Weil ich access_token falsch generiert habe. Ich habe durch Schritte wie folgt festgelegt:

1. füge google-api-client zu pom.xml hinzu

<dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.22.0</version>
    </dependency>

2. Token holen

 public static void main(String[] args) throws Exception {
           GoogleCredential googleCred = GoogleCredential.fromStream(new 
           FileInputStream("C://realtime.json"));
           GoogleCredential scoped = googleCred.createScoped(
                         Arrays.asList(
       // or use firebase.database.readonly for read-only access
           "https://www.googleapis.com/auth/firebase.database",                           
    "https://www.googleapis.com/auth/userinfo.email"
                          )
                  );
                  scoped.refreshToken();
                  String token = scoped.getAccessToken();
                  System.out.println(token);
              }

3. Versuchen Sie, auf die Datenbank .__ zuzugreifen. Kopieren Sie den oben ausgedruckten Wert 
Curl ausführen:

curl 'https://PROJECT_ID.firebaseio.com/users.json?access_token=TOKEN'

Es hat gut funktioniert.

Weitere Informationen finden Sie unter folgendem Link: https://firebase.google.com/docs/reference/rest/database/user-auth#section-get

2
Mr Special

Sie müssen das access_token in die Header einfügen.

Header-Name : Autorisierung

Header-Inhalt : Träger the_token

Um es auszuprobieren und einige Header zu setzen, können Sie einige Tools wie Postbote für Google Chrome oder andere Tools verwenden.

1
EmCode

So was:

 try (InputStream is = new ClassPathResource("your-admin-info.json").getInputStream()) {

      GoogleCredential googleCred = GoogleCredential.fromStream(is);
      scoped = googleCred.createScoped(
          Arrays.asList(
              "https://www.googleapis.com/auth/firebase.database",
              "https://www.googleapis.com/auth/userinfo.email"
          )
      );
      scoped.refreshToken();
      scoped.getAccessToken();

your-admin-info.json ist die Service Admin-Kontoinformation, die Sie für Ihre Konten generieren können

0
Alexis