16

Ich möchte einen Rest Anruf auf einige Daten durch eine Regel mit Hilfe meines Benutzers, so dass ich das Token auf meine Anfrage haben müssen. abhängig von der Version von Firebase Dokumentation gibt es unterschiedliche Art und Weise: alte und veraltete Art und Weise (https://www.firebase.com/docs/rest/api/):Wie authentifiziere ich einen Ruhezustand im Firebase?

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

neue Art und Weise und im die doc zu zitieren (https://firebase.google.com/docs/reference/rest/database/user-auth#section-get):

das Zugriffstoken verwenden Die Datenbank-REST-API akzeptiert access_token = für die Abfragezeichenfolge oder den Header Authenticate: Träger zur Authentifizierung einer Anforderung mit einem Dienstkonto.

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

der neue Weg für mich nicht funktioniert, auch wenn ich die neue Feuerbasis Konsole verwendet, wenn ich es einrichten, und auch wenn das Token die neue Firebase sdk erzeugt, die ich unter Verwendung von m verwendet. Weiß jemand, warum nur der veraltete Weg funktioniert? Ich war daran interessiert, das Token in den Header meiner Anfragen zu setzen, kann aber nicht.

+0

, wenn meine Antwort unten nicht funktioniert, kann man die Fehlermeldung Sie zur Verfügung stellen Sie bitte? – EmCode

+1

Hat jemand das funktioniert? Ich habe das github-Beispiel [link] (https://github.com/firebase/quickstart-js/tree/master/auth/exampletokengenerator) verwendet, um ein Token zu generieren und mich über die benutzerdefinierte Anmeldeseite anzumelden. Das Beispiel funktioniert gut. Wenn ich jedoch das generierte Zugriffstoken (dh die "accessToken" -Ergebnisse von customauth.html) über curl oder postman (dh Autorisierungsheader - Bearer-Token) verwende, wird die Berechtigung verweigert (403) – mikaye

+0

Die Fehlermeldung ist immer dieselbe: 403 (Verboten) {"error": "Berechtigung verweigert." } –

Antwort

1

Sie müssen das access_token in die Header setzen.

Header-Name: Authorization

Kopf Inhalt: Inhaber the_token

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

+0

Wie ich schon sagte in meinem Frage, ich habe versucht, was in der neuen Firebase Doc geschrieben wird. Also habe ich versucht, was Sie gerade gesagt haben, und versuchen Sie es erneut mit Postboten, nur um es zu bestätigen. Es funktioniert nicht für mich. Was funktioniert, ist was im veralteten Dokument geschrieben wird mit:? Auth = eingerichtet in der URL – drevlav

+0

können Sie mir die Fehlermeldung, die Sie erhalten? – EmCode

+0

können Sie das Token in die Kopfzeile setzen, um die geschützten Daten abzurufen? Funktioniert es für dich? – drevlav

-2

Sie müssen überprüfen, ob die Regeln korrekt konfiguriert sind.

Es gibt 4 Optionen zum Authentifizieren.

4 options to use to Authenticate in firebase

Regeln müssen unterschiedlich für die einzelnen Optionen konfiguriert werden.

die Regel unter Versuchen:

Firebase Rule

+2

das Problem Es geht nicht um die Regel, sondern darum, wie man sich authentifiziert. Ich bin in der Lage, mich zu authentifizieren, wenn ich folge, was im veralteten Dokument erklärt wird, aber nicht, was in der neuen Version erklärt wird, wie in meiner Frage – drevlav

-1

Ich hatte das gleiche Problem. Nur das Hinzufügen des Tokens im Authorization-Header funktionierte nicht, aber die alte Methode, 'auth =' in die Anfrage einzufügen, funktionierte. Ich denke, das könnte ein Fehler in Firebase sein.

Meine Lösung besteht darin, sowohl den neuen Weg als auch den alten Weg zu verwenden, d. H. Einschließlich 'auth =' in der Anfrage und auch das Token im Authorization-Header. Nachdem sie das Problem behoben haben, wird Ihre App weiterhin funktionieren.

Btw diese Antworten über Regeln sind falsch, wenn das Problem durch Regeln verursacht wird, wird der Fehler 401 nicht autorisierte statt 403 mit Nachricht sein ‚Erlaubnis verweigert‘

+0

erklärt. Ok Ich redigierte die Antwort, um offensichtlicher zu sein, und ich hoffe, Sie finden es leichter zu verstehen jetzt – Max

-1

So:

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 der Service Admin Kontoinformationen, die Sie auf Ihre Konten generieren

+1

Was ist, wenn ich Java nicht verwende? Ich möchte nur Daten von meinem Server an Firebase senden. – Rodrigo

0

für Java: ich versuchte auth zu verwenden DatabaseRealtime zuzugreifen. Run:

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

Es funktionierte aber auf diese Weise veraltet.
Danach habe ich versucht, access_token I Ausgabe traf zu verwenden, wenn die Verwendung access_token Datenbank in meinem Projekt Feuerbasis abzufragen. Ich habe bereits die Ursache für Bugs gefunden, die ich zuvor kennengelernt habe. Weil ich access_token falsch generiert habe. I durch Schritte wie unten korrigiert:

1. add google-api-Client in pom.xml

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

2. Get Token

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 es zu bestätigen ss Datenbank Kopieren Sie den Wert über
Run curl ausgedruckt:

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

Es hat gut funktioniert.

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