16

Je veux faire un appel de repos sur certaines données protégées par une règle à l'aide de mon utilisateur, donc j'ai besoin d'avoir le jeton à ma demande. selon quelle version de la documentation firebase il y a autre façon: manière ancienne et désapprouvée (https://www.firebase.com/docs/rest/api/):Comment authentifier un appel de repos dans Firebase?

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

nouvelle façon et im citant le doc (https://firebase.google.com/docs/reference/rest/database/user-auth#section-get):

Utilisation du jeton d'accès L'API REST de base de données accepte access_token = sur la chaîne de requête ou l'en-tête Authenticate: Bearer pour authentifier une demande avec un compte de service.

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

la nouvelle façon ne fonctionne pas pour moi, même si je la nouvelle console firebase quand je mis en place, et même si le jeton que je ne suis pas à l'aide est généré à l'aide de la nouvelle sdk Firebase. Est-ce que quelqu'un sait pourquoi seul le mode obsolète fonctionne? J'étais intéressé de mettre le jeton dans l'en-tête de mes requêtes mais je ne peux pas le faire.

+0

si ma réponse ci-dessous ne fonctionne pas peut vous fournir le message d'erreur que vous obtenez s'il vous plaît? – EmCode

+1

Est-ce que quelqu'un a ce travail? J'ai utilisé l'exemple github [link] (https://github.com/firebase/quickstart-js/tree/master/auth/exampletokengenerator) pour générer un jeton et me connecter à partir de la page de connexion personnalisée. L'exemple fonctionne bien. Toutefois, lorsque j'utilise le jeton d'accès généré (c.-à-d. Les résultats "accessToken" de customauth.html) via curl ou postier (ie en-tête Authorization - Bearer token) j'obtiens l'autorisation refusée (403) – mikaye

+0

Le message d'erreur est toujours le même: 403 (Interdit) {"erreur": "Autorisation refusée." } –

Répondre

1

Vous devez placer le paramètre access_token dans les en-têtes.

Nom d'en-tête: Autorisation

contenu en-tête: Bearer the_token

Pour essayer et mettre certains en-têtes, vous pouvez utiliser des outils comme postier pour google chrome ou autre outils.

+0

Comme je l'ai dit dans mon question, j'ai essayé ce qui est écrit dans le nouveau document Firebase. J'ai donc essayé ce que vous venez de dire et ré-essayer d'utiliser le facteur pour le confirmer. Ça ne marche pas pour moi. Ce qui fonctionne est ce qui est écrit dans le doc obsolète en utilisant:? Auth = mis en place dans l'url – drevlav

+0

pouvez-vous me fournir le message d'erreur que vous obtenez? – EmCode

+0

êtes-vous en mesure de mettre le jeton dans l'en-tête pour récupérer les données protégées? Est-ce que ça marche pour toi? – drevlav

-2

Vous devez vérifier si les règles sont configurées correctement.

Il existe 4 options à utiliser pour l'authentification.

4 options to use to Authenticate in firebase

règles devront être configurées différemment pour chaque option.

Essayez la règle suivante:

Firebase Rule

+2

le problème n'est pas sur la règle, mais sur la façon de s'authentifier. Je peux m'authentifier quand je suis ce qui est expliqué dans le doc déprécié, mais pas ce qui est expliqué dans la nouvelle version, comme expliqué dans ma question – drevlav

-1

J'ai eu le même problème. Le seul ajout du jeton dans l'en-tête Authorization ne fonctionnait pas mais l'ancienne façon d'inclure 'auth =' dans la requête fonctionnait. Je pense que cela pourrait être un bug dans Firebase.

Ma solution consiste à utiliser à la fois la nouvelle méthode et l'ancienne méthode, à savoir inclure 'auth =' dans la requête et également le token dans l'en-tête Authorization. Après avoir résolu le problème, votre application continuera à fonctionner.

BTW ces réponses sur les règles sont incorrectes, si le problème est causé par des règles de l'erreur sera 401 au lieu de 403 non autorisé avec le message « permission refusée »

+0

Ok j'ai édité la réponse pour être plus évident et j'espère que vous trouverez plus facile à comprendre maintenant – Max

-1

Comme ceci:

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(); 

votre- admin-info.json est l'information de compte administrateur service que vous pouvez générer sur vos comptes

+1

Que faire si je n'utilise pas Java? Je veux juste envoyer des données de mon serveur à Firebase. – Rodrigo

0

pour java: J'ai essayé d'utiliser auth pour accéder DatabaseRealtime. Run:

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

Cela a fonctionné, mais cette façon dépréciée.
Après que j'ai essayé d'utiliser access_token J'ai rencontré le problème lors de l'utilisation access_token pour interroger la base de données dans mon projet de base de feu. J'ai déjà découvert la cause première des bogues que j'ai rencontrés auparavant. Parce que j'ai généré access_token faux. Je fixe par étapes comme ci-dessous:

1. Ajouter google-api-client dans pom.xml

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

2. Get jeton

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. essayer d'acce base de données ss Copie la valeur imprimée au-dessus
Run boucle:

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

Il a bien fonctionné.

Pour plus d'informations font référence lien: https://firebase.google.com/docs/reference/rest/database/user-auth#section-get