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

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

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

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

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

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.