0

Ich möchte meine Firebase-Datenbank direkt von Postman oder Curl mit Https Rest API verwalten. Zum Beispiel mit postman und https: //MY_FIREBASE_DATABSE_URL/users.json, um Benutzer json zurückzugeben. Wenn ich Sicherheitsregeln für den öffentlichen Zugriff einstelleFirebase HTTP POST Auth Argument

{ 
"rules": { 
".read": true, 
".write": true 
} 

es funktioniert gut.

Aber wenn ich Sicherheitsregeln festgelegt, die Zulassung benötigen

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    } 
} 

I

{ "Fehler", "PERMISSION_DENIED"} erhalten

Soweit ich verstehe, ich brauche https-Anfrage mit auth = SECURITY_TOKEN anhängen. Die Verwendung des geheimen Schlüssels aus der Firebase-Konsole-> Service-Accounts für SECURITY_TOKEN funktioniert nicht, aber es wird trotzdem dort angegeben, als Datenbank-Secrets veraltet sind.

So lade ich einen Token Generator für Java hier verwiesen https://www.firebase.com/docs/rest/guide/user-auth.html#section-rest-server-authentication.

ich den folgenden Code verwenden, um meine Token

public void actionPerformed(ActionEvent e) { 
    String uid = uidField.getText(); 
    boolean admin = adminField.isSelected(); 
    Map<String, Object> authPayload = new HashMap<String, Object>(); 
    authPayload.put("uid", uid); 
    authPayload.put("some", "arbitrary"); 
    authPayload.put("data", "here"); 

    TokenOptions tokenOptions = new TokenOptions(); 
    tokenOptions.setAdmin(admin); 

    TokenGenerator tokenGenerator = new TokenGenerator(<MY_DATABASE_SECRET>); 
    String token = tokenGenerator.createToken(authPayload, tokenOptions); 
    System.out.println(token); 
    tokenField.setText(token); 
} 

als here erwähnt

zu erzeugen, wo MY_DATABASE_SECRET der geheime Schlüssel von Feuerbasis Konsole ist oben erwähnt und uid ist ein Benutzer-ID aus der Liste meiner Firebase Benutzern. Mit diesem Token zum Postboten bekomme ich immer noch die Erlaubnis verweigert.

+0

Die Dokumentation, die Sie für die Legacy-Version von Firebase beziehen ist. Ihr Projekt wurde wahrscheinlich auf der neuen Firebase-Konsole erstellt. Sie können keine Versionen mischen und abgleichen. Informationen zur Authentifizierung von REST-Aufrufen mit der neuen Firebase-Version finden Sie in dieser Antwort: http://stackoverflow.com/a/37444914/209103 von Firebaser Michael Bleich. –

+0

Was ich in diesem Post nicht verstehe (und ich kann dort keinen Kommentar abgeben) ist, was mit "Sie müssen direkt ein Dienstkonto verwenden, um administrativen Zugriff zu erstellen" gemeint ist und wenn ich node.js dafür brauche oder kann mit Java und wie. –

Antwort

0

Schließlich, nachdem ich die Firebase-Dokumentation gründlich gelesen habe, habe ich es herausgefunden. Was ich als Sicherheitstoken für die REST-API verwenden muss, ist eine Firebase-Sicherheitstoken-ID, die ich nach der Anmeldung bei Firebase mit einer anderen Anwendung (iOS, Android, Web) beispielsweise für Android mit folgendem Code

abrufen kann
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser(); 
    mUser.getToken(true) 
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() { 
     public void onComplete(@NonNull Task<GetTokenResult> task) { 
      if (task.isSuccessful()) { 
       String idToken = task.getResult().getToken(); 
       // Send token to your backend via HTTPS 
       // ... 
      } else { 
       // Handle error -> task.getException(); 
      } 
     } 
    }); 

Dies ist das Token, das ich auf Auth-Argument der Abfragezeichenfolge festlegen muss.

Für vollständige Referenz suchen here