rest firebase restful-authentication firebase-realtime-database firebase-authentication

rest - ¿Cómo autentico una llamada de descanso en base de fuego?



firebase restful-authentication (5)

Es necesario comprobar si las reglas están configuradas correctamente.

Hay 4 opciones para usar para autenticar.

Las reglas deberán configurarse de manera diferente para cada opción.

Prueba la regla a continuación:

Quiero hacer una llamada de descanso en algunos datos protegidos por alguna regla utilizando la ayuda de mi usuario, por lo que necesito tener el token para mi solicitud. Dependiendo de la versión de la documentación de Firebase, existe una forma diferente: forma antigua y obsoleta ( https://www.firebase.com/docs/rest/api/ ):

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

nueva forma y estoy citando el documento ( https://firebase.google.com/docs/reference/rest/database/user-auth#section-get ):

Uso del token de acceso La API REST de la base de datos aceptará access_token = en la cadena de consulta o el encabezado Autenticar: Portador para autenticar una solicitud con una cuenta de servicio.

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

La nueva forma no funciona para mí, incluso si usé la nueva consola Firebase cuando la configuré, e incluso si el token que estoy usando se genera usando el nuevo Firebase SDK. ¿Alguien sabe por qué solo funciona la manera desaprobada? Estaba interesado en poner el token en el encabezado de mis solicitudes, pero no puedo hacerlo.


Me gusta esto:

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 es la información de la cuenta de Service Admin que puede generar en sus cuentas


Necesitas poner el access_token en los encabezados.

Nombre de cabecera : Autorización

Contenido del encabezado : portador the_token

Para probarlo y colocar algunos encabezados, puede usar algunas herramientas como cartero para google chrome u otras herramientas.


Para java: intenté usar auth para acceder a DatabaseRealtime. Correr:

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

Funcionó pero de esta manera se desaprueba.
Después de eso traté de usar access_token , encontré el problema cuando uso access_token para consultar la base de datos en mi proyecto de base de fuego. Ya encontré la causa raíz de los errores que conocí antes. Porque access_token se genera incorrectamente. Intenté generar access_token nuevamente, intenté usar access_token como se muestra a continuación:

1. agrega google-api-client en pom.xml

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

2. Obtener token

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. intente acceder a la base de datos Copie el valor impreso arriba
Ejecutar curl:

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

Funciono bien

Para obtener más información, consulte el enlace: https://firebase.google.com/docs/reference/rest/database/user-auth#section-get


Yo tuve el mismo problema. Solo agregar el token en el encabezado de Autorización no funcionó, pero la forma anterior de incluir ''auth ='' en la solicitud funcionó. Creo que eso podría ser un error en Firebase.

Mi solución es usar tanto la forma nueva como la forma antigua, es decir, incluir ''auth ='' en la solicitud y también el token en el encabezado de Autorización. Entonces, después de que solucionen el problema, tu aplicación continuará funcionando.

Por supuesto, si las respuestas sobre las reglas son incorrectas, si el problema se debe a reglas, el error será 401 no autorizado en lugar de 403 con el mensaje ''permiso denegado''