Table of Contents generated with DocToc
- Investigacion: Firebase Authentication - Guia Completa
- 1. Resumen Ejecutivo
- 2. Descripcion de Firebase Authentication
- 3. Firebase Authentication vs Identity Platform
- 4. Multi-Factor Authentication (MFA)
- 5. ID Tokens y JWT
- 6. Custom Claims
- 7. Seguridad y Mejores Practicas
- 8. Integracion con MedTime
- 9. Precios y Costos
- 10. Compliance y Regulaciones
- 11. Referencias
Investigacion: Firebase Authentication - Guia Completa¶
Identificador: MTS-INV-015 Version: 1.0.0 Fecha: 2025-12-07 Autor: SpecQueen + SecurityDrone Solicitado en: IT-02 (Seguridad Servidor) Estado: Completado
1. Resumen Ejecutivo¶
Investigacion tecnica de Firebase Authentication para su implementacion como proveedor de identidad en MedTime. Cubre metodos de autenticacion, MFA, precios, y consideraciones de seguridad para aplicaciones HIPAA-compliant.
1.1. Conclusion Principal¶
| Aspecto | Evaluacion | Notas |
|---|---|---|
| Seguridad | Excelente | OAuth 2.0 + OpenID Connect |
| MFA | Disponible | SMS + TOTP (requiere Identity Platform) |
| Integracion | Sencilla | SDKs nativos iOS/Android/Web |
| HIPAA | Compatible | Con BAA y configuracion adecuada |
| Costo | Escalable | Free tier generoso |
2. Descripcion de Firebase Authentication¶
2.1. Que es Firebase Authentication¶
Firebase Authentication proporciona servicios backend, SDKs faciles de usar, y bibliotecas UI listas para autenticar usuarios. Soporta autenticacion mediante passwords, numeros de telefono, proveedores federados (Google, Facebook, Apple, Twitter), y mas.
| Aspecto | Valor |
|---|---|
| Proveedor | Google Cloud / Firebase |
| Estandares | OAuth 2.0, OpenID Connect |
| Plataformas | iOS, Android, Web, Flutter, C++, Unity |
| Free Tier | 50,000 MAUs (Blaze) / 3,000 DAUs (Spark) |
2.2. Metodos de Autenticacion Soportados¶
| Metodo | Disponibilidad | Uso en MedTime |
|---|---|---|
| Email/Password | Todos los planes | Principal |
| Google Sign-In | Todos los planes | Social login |
| Apple Sign-In | Todos los planes | Requerido iOS |
| Todos los planes | Opcional | |
| Phone/SMS | Todos los planes | MFA |
| Anonymous | Todos los planes | Onboarding |
| SAML | Identity Platform | Enterprise |
| OpenID Connect | Identity Platform | Enterprise |
3. Firebase Authentication vs Identity Platform¶
3.1. Comparacion de Funcionalidades¶
| Funcionalidad | Firebase Auth | Identity Platform |
|---|---|---|
| Email/Password | Si | Si |
| Social Login | Si | Si |
| Phone Auth | Si | Si |
| Anonymous Auth | Si | Si |
| MFA (SMS) | No | Si |
| MFA (TOTP) | No | Si |
| Blocking Functions | No | Si |
| Audit Logging | No | Si |
| SAML/OIDC | No | Si |
| Multi-tenancy | No | Si |
| SLA Enterprise | No | Si |
3.2. Recomendacion para MedTime¶
Recomendacion:
tier_free:
usar: Firebase Authentication basico
mfa: Opcional (incentivar)
tier_pro:
usar: Identity Platform
mfa: Requerido (TOTP preferido)
blocking_functions: Para validaciones custom
tier_perfect:
usar: Identity Platform
mfa: Requerido (TOTP)
audit_logging: Habilitado
multi_device: Con device binding
4. Multi-Factor Authentication (MFA)¶
4.1. Metodos MFA Disponibles¶
| Metodo | Seguridad | UX | Costo | Recomendacion |
|---|---|---|---|---|
| TOTP | Alta | Media | Bajo | Preferido |
| SMS | Media | Alta | Variable | Backup |
4.2. Configuracion TOTP MFA¶
// Habilitar TOTP via Admin SDK (Node.js)
const { getAuth } = require('firebase-admin/auth');
// Configurar proyecto para MFA
await getAuth().projectConfigManager().updateProjectConfig({
multiFactorConfig: {
providerConfigs: [
{
state: 'ENABLED',
totpProviderConfig: {
adjacentIntervals: 5 // Tolerancia de tiempo
}
}
]
}
});
4.3. Requisitos de MFA¶
Requisitos MFA:
email_verification:
requerido: true
razon: "Prevenir registro con email ajeno"
sdk_versions:
web: "v9.19.1+"
android: "v22.1.0+"
ios: "v10.12.0+"
totp_apps_compatibles:
- Google Authenticator
- Microsoft Authenticator
- Authy
- 1Password
4.4. Flujo de Enrollment MFA¶
FLUJO ENROLLMENT MFA:
+------------------------------------------------------------------+
USUARIO APP FIREBASE
| | |
| 1. Iniciar MFA | |
|----------------------->| |
| | 2. Generar secreto TOTP |
| |-------------------------->|
| | 3. Secret + QR Code |
| |<--------------------------|
| 4. Mostrar QR | |
|<-----------------------| |
| | |
| 5. Escanear + codigo | |
|----------------------->| |
| | 6. Verificar codigo |
| |-------------------------->|
| | 7. MFA habilitado |
| |<--------------------------|
| 8. Confirmacion | |
|<-----------------------| |
+------------------------------------------------------------------+
5. ID Tokens y JWT¶
5.1. Estructura del ID Token¶
Firebase ID tokens son JWTs que cumplen con OpenID Connect. Estructura:
{
"header": {
"alg": "RS256",
"typ": "JWT",
"kid": "firebase-key-id"
},
"payload": {
"iss": "https://securetoken.google.com/{project-id}",
"aud": "{project-id}",
"auth_time": 1701936000,
"user_id": "uid123...",
"sub": "uid123...",
"iat": 1701936000,
"exp": 1701939600,
"email": "user@example.com",
"email_verified": true,
"firebase": {
"identities": {
"email": ["user@example.com"]
},
"sign_in_provider": "password"
}
}
}
5.2. Claims Reservados¶
Los siguientes claims son reservados por OpenID Connect y Firebase:
Claims Reservados (NO usar como custom claims):
oidc:
- acr
- amr
- at_hash
- aud
- auth_time
- azp
- cnf
- c_hash
- exp
- iat
- iss
- jti
- nbf
- nonce
- sub
firebase:
- firebase
- user_id
5.3. Duracion y Refresh¶
Token Lifecycle:
id_token:
duracion: 1 hora
refresh: Automatico via SDK
refresh_token:
duracion: Indefinido (hasta revocacion)
revocacion:
- Cambio de password
- Deshabilitacion de cuenta
- Revocacion manual via Admin SDK
6. Custom Claims¶
6.1. Que son Custom Claims¶
Custom claims permiten agregar atributos personalizados al ID token del usuario para implementar control de acceso basado en roles (RBAC).
6.2. Limitaciones¶
Limitaciones Custom Claims:
tamano_maximo: 1000 bytes (payload completo)
tipos_soportados:
- string
- number
- boolean
- array
- object
- null
tipos_NO_soportados:
- Date
- undefined
- functions
- otros no-JSON
propagacion:
- Al siguiente login
- Al expirar token actual (1 hora)
- Con getIdToken(true) forzado
6.3. Custom Claims para MedTime¶
# Ejemplo: Asignar claims de MedTime
import firebase_admin
from firebase_admin import auth
def set_medtime_claims(uid: str, tier: str, role: str, device_id: str):
"""Asigna custom claims de MedTime a un usuario."""
claims = {
"medtime_tier": tier, # "free", "pro", "perfect"
"medtime_role": role, # "patient", "caregiver", "admin"
"medtime_device_id": device_id,
"medtime_permissions": get_permissions_for_tier(tier)
}
# Verificar tamano < 1000 bytes
import json
claims_size = len(json.dumps(claims).encode('utf-8'))
if claims_size > 1000:
raise ValueError(f"Claims exceden 1000 bytes: {claims_size}")
auth.set_custom_user_claims(uid, claims)
6.4. Acceso a Claims¶
// Cliente: Obtener claims del token
const user = firebase.auth().currentUser;
const tokenResult = await user.getIdTokenResult();
if (tokenResult.claims.medtime_tier === 'pro') {
// Mostrar funcionalidades Pro
}
// Servidor: Verificar claims
const decodedToken = await admin.auth().verifyIdToken(idToken);
if (decodedToken.medtime_tier === 'pro') {
// Permitir acceso a recursos Pro
}
7. Seguridad y Mejores Practicas¶
7.1. Verificacion de Tokens¶
# Python: Verificacion segura de ID token
from firebase_admin import auth
async def verify_token_secure(id_token: str) -> dict:
"""Verifica un ID token de forma segura."""
try:
# Verificar firma, expiracion, y audiencia
decoded = auth.verify_id_token(id_token)
# Validaciones adicionales
if not decoded.get('email_verified', False):
raise ValueError("Email no verificado")
# Para operaciones sensibles, verificar revocacion
# (costo adicional de latencia)
auth.verify_id_token(id_token, check_revoked=True)
return decoded
except auth.ExpiredIdTokenError:
raise AuthError("Token expirado", 401)
except auth.RevokedIdTokenError:
raise AuthError("Token revocado", 401)
except auth.InvalidIdTokenError:
raise AuthError("Token invalido", 401)
7.2. Seguridad del Password¶
Password Security:
requisitos_minimos:
longitud: 8 caracteres
# Firebase maneja internamente
recomendaciones_adicionales:
- Validar en cliente antes de enviar
- No almacenar passwords (Firebase lo maneja)
- Implementar rate limiting en login
password_reset:
metodo: Email con link temporal
expiracion: 1 hora
unico_uso: true
7.3. Proteccion contra Ataques¶
Protecciones Integradas:
brute_force:
- Rate limiting automatico
- CAPTCHA despues de intentos fallidos
session_fixation:
- Tokens regenerados en cada refresh
csrf:
- Tokens con binding a dominio
xss:
- SDK maneja tokens de forma segura
- No exponer tokens en URL
8. Integracion con MedTime¶
8.1. Arquitectura Propuesta¶
ARQUITECTURA FIREBASE AUTH EN MEDTIME:
+------------------------------------------------------------------+
+----------------+ +----------------+
| iOS App | | Android App |
| Firebase SDK | | Firebase SDK |
+-------+--------+ +--------+-------+
| |
| ID Token (JWT) |
+-------------+--------------+
|
v
+-------------+-------------+
| API Gateway |
| (Verifica JWT) |
+-------------+-------------+
|
v
+-------------+-------------+
| Backend MedTime |
| - Extrae claims |
| - Configura RLS context |
| - Procesa request |
+-------------+-------------+
|
v
+-------------+-------------+
| PostgreSQL |
| (RLS por user_id) |
+---------------------------+
+------------------------------------------------------------------+
8.2. Flujo de Autenticacion Completo¶
Flujo Login MedTime:
1_inicio:
cliente: "Usuario ingresa credenciales"
destino: Firebase Auth
2_verificacion:
firebase: "Verifica credenciales"
mfa: "Si habilitado, solicitar segundo factor"
3_token:
firebase: "Genera ID Token con claims"
cliente: "Recibe y almacena token"
4_request:
cliente: "Envia request con Authorization header"
formato: "Bearer {id_token}"
5_backend:
servidor: "Verifica token con Admin SDK"
extrae: "uid, tier, permissions"
6_rls:
servidor: "SET LOCAL app.current_user_id = uid"
postgresql: "Aplica RLS policies"
7_response:
servidor: "Retorna datos filtrados por RLS"
9. Precios y Costos¶
9.1. Estructura de Precios¶
| Plan | Limite | Costo |
|---|---|---|
| Spark (Free) | 3,000 DAUs | $0 |
| Blaze | 50,000 MAUs | $0 |
| Blaze | 50,001 - 100,000 MAUs | $0.0055/MAU |
| Blaze | 100,001 - 1M MAUs | $0.0046/MAU |
| Blaze | 1M+ MAUs | $0.0032/MAU |
9.2. Costos Adicionales¶
Costos Adicionales:
sms_verification:
usa: $0.01/SMS
mexico: $0.06/SMS
otros: Variable
saml_oidc:
por_mau: $0.015
phone_auth:
incluido: 10,000/mes
adicional: Segun region
9.3. Estimacion para MedTime¶
Estimacion Costos (Primer ano):
usuarios_free: 10,000
usuarios_pro: 1,000
usuarios_perfect: 100
mau_total: 11,100
costo_auth:
base: $0 (bajo 50,000 MAUs)
costo_sms:
mfa_enrollments: ~500/mes
costo_mensual: ~$30 (Mexico)
total_anual_estimado: ~$400
10. Compliance y Regulaciones¶
10.1. HIPAA Compliance¶
HIPAA con Firebase:
baa_disponible: true
requisitos:
- Firmar BAA con Google Cloud
- Usar Identity Platform
- Habilitar audit logging
- Configurar MFA para datos sensibles
phi_en_firebase:
email: "Puede considerarse PHI"
phone: "Puede considerarse PHI"
custom_claims: "NO almacenar PHI"
recomendacion:
- Usar UIDs para referencias
- PHI solo en cliente (cifrado)
- Server es Zero-Knowledge
10.2. Audit Logging¶
Audit Logging (Identity Platform):
eventos_registrados:
- Creacion de cuenta
- Login exitoso/fallido
- Cambio de password
- Habilitacion MFA
- Revocacion de sesion
retencion:
defecto: 30 dias
exportable: BigQuery
formato:
tipo: Cloud Logging
estructura: JSON estructurado
11. Referencias¶
11.1. Documentacion Oficial¶
| Recurso | URL |
|---|---|
| Firebase Auth Docs | https://firebase.google.com/docs/auth |
| Admin Auth API | https://firebase.google.com/docs/auth/admin |
| Verify ID Tokens | https://firebase.google.com/docs/auth/admin/verify-id-tokens |
| Custom Claims | https://firebase.google.com/docs/auth/admin/custom-claims |
| MFA Web | https://firebase.google.com/docs/auth/web/multi-factor |
| TOTP MFA | https://firebase.google.com/docs/auth/web/totp-mfa |
| Identity Platform | https://cloud.google.com/identity-platform |
11.2. Documentos Internos Relacionados¶
| ID | Documento | Relacion |
|---|---|---|
| TECH-SEC-SRV-001 | 05-seguridad-servidor.md | Implementacion en servidor |
| TECH-SEC-CLIENT-001 | 04-seguridad-cliente.md | Integracion en cliente |
| MTS-AUTH-001 | Autenticacion | Requisitos funcionales |
| INV-005 | HIPAA Security Rule | Compliance |
Documento generado por SpecQueen + SecurityDrone Fuentes: Firebase Documentation, Google Cloud Identity Platform