web-dev-qa-db-fra.com

utiliser postman pour accéder à firebase REST API

J'essaie d'utiliser postman pour faire REST les appels d'API à firebase. J'ai réussi à lire à partir de firebase lorsque ma règle de sécurité est d'autoriser tous les utilisateurs, y compris ceux non autorisés.

mais quand j'utilise cette règle:

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

J'obtiens "erreur": "autorisation refusée" du facteur. J'ai fait le jeton de demande pour le client Web oauth2.0 de Google et j'ai récupéré le jeton d'autorisation_code.

J'ai essayé d'utiliser le jeton dans l'URL et dans l'en-tête, je l'ai essayé avec GET & POST request et toujours refusé).

veuillez aider. Merci d'avance

9
Reno Wijoyo

Les réponses ci-dessus n'ont pas fonctionné pour moi.

Ce qui a fonctionné pour moi allait

Paramètres du projet (engrenage du coin supérieur gauche) -> Comptes de service (onglet à l'extrême droite) -> Secrets de la base de données (menu de gauche) -> Faites défiler vers le bas , survolez les puces et cliquez sur Afficher

Utilisez-le comme clé d'authentification, c'est-à-dire .../mycollection.json?auth=HERE

19
CodyBugstein

Pour moi, cela a fonctionné comme ceci:

https: //your-database-url/users.json? auth = YOUR_AUTH_KEY

Où pouvez-vous obtenir cette AUTH_KEY?

vous obtenez cette clé de votre Project Settings -> Database -> Secret Key

8
Andre Evangelista

Essayez quelque chose comme ça

https://your-database-url/users.json?auth=YOUR_AUTH_KEY

La réponse est un JSON de votre nœud USERS

5

J'ai créé un script de pré-demande Postman pour aider à créer une authentification: Bearer JWT. Devrait économiser beaucoup de copier-coller lors du test des API avec Firebase Auth. https://Gist.github.com/moneal/af2d988a770c3957df11e3360af62635

Copie du script au moment de la publication:

/**
 * This script expects the global variables 'refresh_token' and 'firebase_api_key' to be set. 'firebase_api_key' can be found
 * in the Firebase console under project settings then 'Web API Key'.
 * 'refresh_token' as to be gathered from watching the network requests to https://securetoken.googleapis.com/v1/token from 
 * your Firebase app, look for the formdata values
 * 
 * If all the data is found it makes a request to get a new token and sets a 'auth_jwt' environment variable and updates the 
 * global 'refresh_token'.
 * 
 * Requests that need authentication should have a header with a key of 'Authentication' and value of '{{auth_jwt}}'
 *
 * Currently the nested assertions silently fail, I don't know why.
 */
pm.expect(pm.globals.has('refresh_token')).to.be.true;
pm.expect(pm.globals.has('firebase_api_key')).to.be.true;

var sdk = require('postman-collection'),
  tokenRequest = new sdk.Request({
    url: 'https://securetoken.googleapis.com/v1/token',
    method: 'POST',
    body: {
      mode: 'urlencoded',
      urlencoded: [{
          type: 'text',
          key: 'key',
          value: pm.globals.get('firebase_api_key')
        },
        {
          type: 'text',
          key: 'grant_type',
          value: 'refresh_token'
        },
        {
          type: 'text',
          key: 'refresh_token',
          value: pm.globals.get('refresh_token')
        },
      ]
    }
  });

pm.sendRequest(tokenRequest, function(err, response) {

  pm.test('request for access token was ok', function() {
    pm.expect(response).to.be.ok();
  });

  const json = response.json();
  pm.expect(json).to.an('object');

  pm.test('response json has needed properties', function() {

    pm.expect(json).to.have.own.property('access_token');
    pm.expect(json).to.have.own.property('token_type');
    pm.expect(json).to.have.own.property('refresh_token');

    const accessToken = json.access_token;
    const tokenType = json.token_type;
    const refreshToken = json.refresh_token;

    pm.environment.set('auth_jwt', tokenType + ' ' + accessToken);
    pm.globals.set('refresh_token', refreshToken);

  });

});
5
Morgan O'Neal

Il est très simple de récupérer des données via Postman: voici comment je l'ai fait

1 Votre URL de base de données

https://YOUR_PROJECT_URL.firebaseio.com/YOUR_STRUCTURE/CLASS.json

2 Ajouter la clé API dans l'en-tête en tant qu'auth

auth = valeur de votre API_KEY

exemple:

1

2
sud007

Remarque: L'ajout de cette réponse car toutes les options répertoriées ici est obsolète ou ne fonctionne pas (principalement en raison d'étapes manquantes).

Le meilleur moyen de le faire fonctionner avec Postman est d'utiliser jetons d'accès Google OAuth2 . Le lien fourni décrit en entier mais j'ai ajouté des étapes rapides.

Étape 1: Téléchargez Service-Accounts.json

answer_img_1

Étape 2: Générez un jeton d'accès en Java (le lien fourni décrit le support dans une autre langue pour cela)

  • assurez-vous d'inclure cette dépendance:
implementation 'com.google.api-client:google-api-client:1.25.0'

OR

<dependency>
   <groupId>com.google.api-client</groupId>
   <artifactId>google-api-client</artifactId>
   <version>1.25.0</version>
 </dependency>
  • Exécutez ce code pour générer un jeton (copié à partir des javadocs de Google)
   // Load the service account key JSON file
     FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

     GoogleCredential scoped = GoogleCredential
     .fromStream(serviceAccount)
     .createScoped(
         Arrays.asList(
           "https://www.googleapis.com/auth/firebase.database",
           "https://www.googleapis.com/auth/userinfo.email"
         )
     );
     // Use the Google credential to generate an access token
     scoped.refreshToken();
     String token = scoped.getAccessToken();
     System.out.println(token);

Étape 3: utilisez le jeton dans Postman

Post man Oauth 2 token

0
rahulkesharwani