16

Voglio fare una chiamata di riposo su alcuni dati protetti da alcune regole usando l'aiuto del mio utente, quindi ho bisogno di avere il token alla mia richiesta. a seconda di quale versione di documentazione Firebase c'è modo diverso: modo vecchio e obsoleto (https://www.firebase.com/docs/rest/api/):Come posso autenticare una chiamata di riposo in firebase?

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

modo nuovo e im citando il doc (https://firebase.google.com/docs/reference/rest/database/user-auth#section-get):

Utilizzando il token di accesso L'API REST del database accetterà access_token = sulla stringa di query o intestazione Authenticate: Bearer per autenticare una richiesta con un account di servizio.

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

il nuovo modo non funziona per me anche se ho usato la nuova console Firebase quando ho impostato in su, e anche se il token che i m utilizzando viene generato utilizzando il nuovo SDK Firebase. Qualcuno sa perché solo il modo deprecato funziona? Ero interessato a mettere il token nell'intestazione delle mie richieste ma non ci riesco.

+0

se la mia risposta al di sotto non funziona si può fornire il messaggio di errore che si ottiene per favore? – EmCode

+1

Qualcuno ha questo lavoro? Ho utilizzato l'esempio github [collegamento] (https://github.com/firebase/quickstart-js/tree/master/auth/exampletokengenerator) per generare un token e accedere con esso dalla pagina di accesso personalizzata. L'esempio funziona bene. Tuttavia, quando utilizzo il token di accesso generato (ovvero i risultati "accessToken" da customauth.html) tramite curl o postman (ad esempio intestazione di autorizzazione - token Bearer) ottengo il permesso negato (403) – mikaye

+0

Il messaggio di errore è sempre lo stesso: 403 (Proibito) {"error": "Autorizzazione negata." } –

risposta

1

È necessario inserire access_token nelle intestazioni.

nome intestazione: Autorizzazione

contenuto Intestazione: Portatore the_token

di provare e mettere alcune intestazioni è possibile utilizzare alcuni strumenti come postino per Google Chrome o altro utensili.

+0

Come ho detto nel mio domanda, ho provato ciò che è scritto nel nuovo documento Firebase. Così ho provato quello che hai appena detto e riprovare a usare il postino solo per confermarlo. Non sta funzionando per me. Ciò che funziona è ciò che è scritto nel documento deprecato utilizzando:? Auth = impostato nell'URL – drevlav

+0

puoi fornirmi il messaggio di errore che ottieni? – EmCode

+0

sei in grado di mettere il token nell'intestazione per recuperare i dati protetti? sta funzionando per te? – drevlav

-2

È necessario verificare se le regole sono configurate correttamente.

Esistono 4 opzioni da utilizzare per l'autenticazione.

4 options to use to Authenticate in firebase

regole dovranno essere configurato in modo diverso per ciascuna delle opzioni.

Prova la regola di seguito:

Firebase Rule

+2

il problema non si tratta della regola ma di come autenticarsi. Sono in grado di autenticarmi quando seguo ciò che è spiegato nel doc deprecato, ma non ciò che è spiegato nella nuova versione, come spiegato nella mia domanda – drevlav

-1

Ho avuto lo stesso problema. L'aggiunta del token nell'intestazione Autorizzazione non ha funzionato, ma il vecchio modo di includere "auth =" nella richiesta ha funzionato. Penso che potrebbe essere un bug in Firebase.

La mia soluzione è utilizzare sia il nuovo modo che il vecchio modo, vale a dire includendo "auth =" nella richiesta e anche il token nell'intestazione Autorizzazione. Quindi, dopo aver risolto il problema, l'app continuerà a funzionare.

Btw quelle risposte sulle regole non sono corretti, se il problema è causato da regole l'errore sarà 401 non autorizzato, invece di 403 con il messaggio 'permesso negato'

+0

Ok ho modificato la risposta per essere più ovvia e spero che trovi più facile capire ora – Max

-1

Ti piace questa:

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 è il cliente Info servizio di amministrazione che si può generare sul vostro account

+1

Cosa succede se non sto usando Java? Voglio solo inviare dati dal mio server a Firebase. – Rodrigo

0

per Java: ho cercato di usare auth per accedere DatabaseRealtime. Run:

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

Ha funzionato, ma in questo modo deprecato.
Successivamente ho provato a utilizzare access_token Ho riscontrato un problema quando utilizzo access_token per interrogare Database nel mio progetto firebase. Ho già scoperto la causa principale degli errori che ho incontrato in precedenza. Perché ho generato access_token errato. Ho fissato da passi come muggito:

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 gettone

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. prova ad acce ss banca dati Copiare il valore stampato sopra
Run ricciolo:

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

Ha funzionato bene.

Per maggiori informazioni consultare il link: https://firebase.google.com/docs/reference/rest/database/user-auth#section-get