3. Backend .NET 8: Auth Firebase y esqueleto API

Curso Flutter y .NET 8 con Novita AI: índice completo paso a paso

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

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

  1. Tener clonado o disponible codigo/ de esta serie.
  2. Contar con Firebase y Novita configurados para pruebas.
  3. Haber completado el capítulo anterior del curso.

Paso 1: Estructura base

El proyecto principal está en:

  • codigo/backend/InvitaIA.Api/

Piezas clave:

  1. Program.cs: DI, Auth, CORS, Swagger, Hangfire.
  2. Auth/FirebaseAuthenticationHandler.cs: valida ID token.
  3. Controllers/*: endpoints REST.
  4. 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:

  1. POST /api/webhooks/novita (AllowAnonymous)
  2. GET /api/invitations/{id}/share (AllowAnonymous)

Troubleshooting

  1. 401 Unauthorized: token inválido o expirado.
  2. FirebaseAuth.DefaultInstance falla: JSON Admin mal configurado.
  3. user_id vací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.cs
    • codigo/backend/InvitaIA.Api/Auth/FirebaseAuthenticationHandler.cs
    • codigo/backend/InvitaIA.Api/Controllers/InvitationsController.cs
  • Documentación oficial:

Share this content:

Curso Flutter y .NET 8 con Novita AI: índice completo paso a paso

2. Configurar entorno .NET 8 + Flutter + Firebase + Novita AI 4. Integrar Novita AI: text-to-image e image-to-image en .NET 8

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.