web-dev-qa-db-fra.com

Comment puis-je authentifier un appel de repos dans firebase?

Je souhaite effectuer une pause sur certaines données protégées par une règle à l'aide de l'aide de mon utilisateur. J'ai donc besoin du jeton correspondant à ma demande. En fonction de la version de la documentation de Firebase, il existe différentes manières: ancienne et obsolète ( https://www.firebase.com/docs/rest/api/ ): 

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

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

Utilisation du jeton d'accès L'API de base de données REST acceptera 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 méthode ne fonctionne pas pour moi même si j'ai utilisé la nouvelle console Firebase lors de la configuration et même si le jeton utilisé est généré à l'aide du nouveau sdk de Firebase. Est-ce que quelqu'un sait pourquoi seule la méthode obsolète fonctionne? J'étais intéressé de mettre le jeton dans l'en-tête de mes demandes mais je ne peux pas le faire.

15
drevlav

Pour Java: J'ai essayé d'utiliser auth pour accéder à DatabaseRealtime. Courir: 

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

Cela a fonctionné mais de cette façon déconseillé. 
Après cela, j'ai essayé d'utiliser access_token J'ai rencontré un problème lors de l'utilisation de access_token pour interroger la base de données dans mon projet firebase . J'ai déjà découvert la cause fondamentale des bogues. J'ai rencontré avant. Parce que j'ai mal généré access_token. J'ai fixé 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. Obtenir un 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'accéder à la base de données Copier la valeur imprimée ci-dessus 
Run curl:

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

Cela a bien fonctionné.

Pour plus d'informations, consultez le lien: https://firebase.google.com/docs/reference/rest/database/user-auth#section-get

2
Mr Special

Vous devez mettre access_token dans les en-têtes.

Nom de l'en-tête : Autorisation

Contenu de l'en-tête : Bearer the_token

Pour l'essayer et mettre des en-têtes, vous pouvez utiliser des outils tels que postman pour Google Chrome ou d'autres outils.

1
EmCode

Comme ça:

 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 correspond aux informations sur le compte d'administrateur de services que vous pouvez générer sur vos comptes.

0
Alexis