Lienzo Abierto: una galería de imágenes para aprender, adaptar y hacer tuya
Una galería de imágenes con búsqueda, favoritos e importación local. Código abierto, ilustraciones de ejemplo y un recorrido para adaptarla.
Implementa un backend .NET 8 con autenticación Firebase, controladores base y servicios para una app Flutter de generación de imágenes IA.

Actualizado: 20 de febrero de 2026.
Aquí montas el backend principal y entiendes cómo validar el token Firebase en cada request.
codigo/ de esta serie.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.builder.Services
.AddAuthentication("Firebase")
.AddScheme<AuthenticationSchemeOptions, FirebaseAuthenticationHandler>("Firebase", _ => { });
builder.Services.AddAuthorization();
Con esto, los controladores con [Authorize] exigen token válido.
En InvitationsController se usa:
private string Uid => User.FindFirstValue("user_id") ?? string.Empty;
Ese user_id lo establece el FirebaseAuthenticationHandler tras validar token.
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
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)401 Unauthorized: token inválido o expirado.FirebaseAuth.DefaultInstance falla: JSON Admin mal configurado.user_id vacío: el handler no se ejecutó o token no llegó.Porque Firebase Admin SDK ya implementa validación completa de firma y claims.
Sí, si Firebase emite ID token válido, el backend no cambia.
is_admin, obtenido desde Firestore en el handler.
codigo/backend/InvitaIA.Api/Program.cscodigo/backend/InvitaIA.Api/Auth/FirebaseAuthenticationHandler.cscodigo/backend/InvitaIA.Api/Controllers/InvitationsController.cs