Actualmente tengo un iframe que incrusto en mi sitio, en una extensión de Chrome y en sitios de terceros.
El problema es el siguiente: estoy completando partes de mi iframe con datos de firebase. En mi sitio, inserto mi propio iframe y está protegido por un token de base de fuego (las vistas), no sé exactamente cómo funciona, pero devuelve los datos correctamente cuando llama a la base de datos. Ejemplo:
getData( reference: string, ){ const ref = `accounts/${reference}`; const dataReturn = this.db.object(ref).valueChanges(); return dataReturn; }Esto regresa bien en mi aplicación web, cuando el usuario cierra la sesión en mi aplicación web, los datos están protegidos (como debe ser)
El problema comienza aquí: cuando un tercero incrusta mi iframe, usa un token oAuth (para obtener usuarios, etc. de mi API), por lo que no inicia sesión en mi sitio web, por lo tanto, cuando incrusta e intenta obtener los datos (automáticamente, ya que llamamos a firebase onInit), firebase los bloquea porque no tienen un token válido/no están autenticados en mi sitio web.
¿Hay alguna manera de usar ese token oAuth para permitirles obtener los datos de Firebase?
El mismo escenario ocurre en la extensión de Chrome, hacemos que el usuario inicie sesión con un token oAuth (para evitar crear una cuenta e iniciar sesión en nuestra aplicación web, evitando problemas de CORS).
Estas son mis reglas en base de datos en tiempo real firebase:
"accounts": { ".read": "auth !== null", ".write": false, }¡Gracias!
Si el token de OAuth es de un colaborador en el proyecto de Firebase y ese colaborador tiene acceso a Realtime Database, el cliente también tendrá el mismo acceso a la base de datos.
En ese caso, sus llamadas a la API eludirán las reglas de seguridad de su base de datos, al igual que cuando el colaborador iniciaría sesión en la consola de Firebase y accedería a la base de datos allí.
Ok... para cualquiera que se pregunte... un compañero de trabajo resolvió este problema enviando el token de oAuth a nuestro backend y devolviendo desde allí un token válido de Firebase. Con ese token, solo iniciamos sesión con la función firebase signInWithCustomToken() (por supuesto, aplicamos la lógica para que solo los usuarios de oAuth puedan usar esto automáticamente). De esa manera, mis usuarios tienen acceso a la base de datos en tiempo real ya que están autenticados en firebase