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.
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
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.
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.