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
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
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
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
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);
});
});
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:
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.
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>
// 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);