usuario current create crear con auth firebase firebase-authentication

firebase - current - Uso de tokens personalizados para realizar solicitudes de REST a FB DB como administrador



firebase web (2)

Estoy migrando a la nueva base de datos y 3.0 libs del cliente. Estoy actualizando la parte que genera un token de autenticación personalizado (en nuestro servidor) para hacer un PATCH para actualizar un recurso en el DB de Firebase.

Estas solicitudes de PATCH solían ser realizadas por nuestro servidor a Firebase usando reclamos de admin basados ​​en esto: https://www.firebase.com/docs/rest/guide/user-auth.htm

Para el nuevo DB, estoy generando el token JWT (usando ruby-jwt ) de esta manera:

payload = { aud: "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", claims: custom_claims.merge({ admin: true }), exp: now_seconds + (60 * 60), # Maximum expiration time is one hour iat: now_seconds, iss: service_account_email, sub: service_account_email, uid: uid } JWT.encode(payload, private_key, "RS256")

Una solicitud de PATCH con este token para Firebase DB falla con: Missing claim ''kid'' in auth header .


En la nueva base de Firebase necesita usar directamente una cuenta de servicio para crear credenciales de acceso administrativo. Aquí hay un fragmento de Node.js que muestra cómo realizar una llamada REST a la base de datos:

// key.json is a service account key downloaded from the Firebase Console var key = require(''./key.json''); var google = require(''googleapis''); var request = require(''request''); var DATABASE_URL = ''https://<databaseName>.firebaseio.com''; var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, [ ''https://www.googleapis.com/auth/userinfo.email'', ''https://www.googleapis.com/auth/firebase.database'' ]); jwtClient.authorize(function(err, tokens) { request({ url: DATABASE_URL + ''/.json'', method: ''GET'', headers: { ''Authorization'': ''Bearer '' + tokens.access_token } }, function(err, resp) { console.log(resp.body); }); });

Para hacer lo mismo en Ruby, puedes echar un vistazo a la gema googleauth para obtener el token de acceso usando las credenciales de la cuenta de servicio.


Aquí está el equivalente de la respuesta de Michael Bleigh usando el módulo ruby ​​googleauth:

require ''googleauth'' scopes = [ ''https://www.googleapis.com/auth/userinfo.email'', ''https://www.googleapis.com/auth/firebase.database''] auth = ::Google::Auth.get_application_default(scopes) auth_client = auth.dup auth_client.sub = "[email protected]" token = auth_client.fetch_access_token!

También deberá establecer la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta del archivo JSON de su cuenta de servicio. el valor de auth_client.sub proviene de client_email en este archivo JSON.

Por supuesto, como se indica arriba, esto solo es válido en una aplicación de servidor que usted controle.

Además, realizar la solicitud a la API REST de firebase sigue siendo un ejercicio para el lector.

referencias