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.
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
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.
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