- 0. Curso Flutter + .NET 8 + Novita AI: índice completo
- 1. Arquitectura Flutter + backend .NET 8 con Novita AI
- 2. Configurar entorno .NET 8 + Flutter + Firebase + Novita AI
- 3. Backend .NET 8: Auth Firebase y esqueleto API
- 4. Integrar Novita AI: text-to-image e image-to-image en .NET 8
- 5. Webhook Novita y procesamiento asíncrono
- 6. Firestore, modelos y endpoints de dominio
- 7. Flutter: login Google y configuración API
- 8. Flutter: subida de imagen y creación de invitaciones
- 9. Listado, estado y detalle de invitaciones
- 10. ControlNet completo en backend y Flutter
- 11. LLM con Novita: img2prompt y adaptación de prompts
- 12. Despliegue, checklist final y publicación WordPress
- Bonus 01: vídeo con FFmpeg y flujo opcional
- Bonus 02: importador de modelos Novita a Firestore
- Bonus 03: Prompt Generator y administración básica
Actualizado: 20 de febrero de 2026.
Aquí montas el backend principal y entiendes cómo validar el token Firebase en cada request.
Prerrequisitos
- Tener clonado o disponible
codigo/de esta serie. - Contar con Firebase y Novita configurados para pruebas.
- Haber completado el capítulo anterior del curso.
Paso 1: Estructura base
El proyecto principal está en:
codigo/backend/InvitaIA.Api/
Piezas clave:
Program.cs: DI, Auth, CORS, Swagger, Hangfire.Auth/FirebaseAuthenticationHandler.cs: valida ID token.Controllers/*: endpoints REST.Services/*: dominio e integración externa.
Paso 2: Revisar pipeline de autenticación
builder.Services
.AddAuthentication("Firebase")
.AddScheme<AuthenticationSchemeOptions, FirebaseAuthenticationHandler>("Firebase", _ => { });
builder.Services.AddAuthorization();
Con esto, los controladores con [Authorize] exigen token válido.
Paso 3: Extraer UID en controladores
En InvitationsController se usa:
private string Uid => User.FindFirstValue("user_id") ?? string.Empty;
Ese user_id lo establece el FirebaseAuthenticationHandler tras validar token.
Paso 4: Diagrama de auth
sequenceDiagram
participant App as Flutter App
participant FA as Firebase Auth
participant API as .NET API
App->>FA: Login Google
FA-->>App: idToken
App->>API: Authorization: Bearer idToken
API->>FA: VerifyIdTokenAsync
FA-->>API: uid + claims
API-->>App: 200/401
Paso 5: Verificar endpoints protegidos
cd codigo/backend
rg -n "\[Authorize\]" InvitaIA.Api/Controllers -S
Endpoints públicos relevantes:
POST /api/webhooks/novita(AllowAnonymous)GET /api/invitations/{id}/share(AllowAnonymous)
Troubleshooting
401 Unauthorized: token inválido o expirado.FirebaseAuth.DefaultInstancefalla: JSON Admin mal configurado.user_idvacío: el handler no se ejecutó o token no llegó.
FAQ corta
¿Por qué no validar JWT manualmente?
Porque Firebase Admin SDK ya implementa validación completa de firma y claims.
¿Puedo usar email/password en lugar de Google?
Sí, si Firebase emite ID token válido, el backend no cambia.
¿Qué claim define admin?
is_admin, obtenido desde Firestore en el handler.
Fuente verificada
- Código del curso:
codigo/backend/InvitaIA.Api/Program.cscodigo/backend/InvitaIA.Api/Auth/FirebaseAuthenticationHandler.cscodigo/backend/InvitaIA.Api/Controllers/InvitationsController.cs
- Documentación oficial:
Share this content: