Vicen Moreno

Pro Googler

Follow me on GitHub

.NET 8 Identity Endpoints - Autenticación sin IdentityServer

Cuando .NET 8 trae autenticación built-in y te preguntas si aún necesitas IdentityServer

La novedad

.NET 8 introdujo Identity API Endpoints: autenticación JWT lista para usar sin dependencias externas.

Para proyectos simples, puede ser suficiente. Para enterprise, probablemente no.

Setup básico

dotnet new webapi -n AuthDemo
cd AuthDemo
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
// Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlite("Data Source=app.db"));

builder.Services.AddIdentityApiEndpoints<IdentityUser>()
    .AddEntityFrameworkStores<AppDbContext>();

builder.Services.AddAuthorization();

var app = builder.Build();

app.MapIdentityApi<IdentityUser>();

app.MapGet("/secret", () => "Solo usuarios autenticados")
    .RequireAuthorization();

app.Run();

Eso es todo. Tienes endpoints de autenticación funcionando.

Endpoints generados automáticamente

POST /register        - Crear usuario
POST /login           - Login, devuelve tokens
POST /refresh         - Refresh token
GET  /confirmEmail    - Confirmar email
POST /resendConfirmationEmail
POST /forgotPassword  - Solicitar reset
POST /resetPassword   - Reset con token
POST /manage/2fa      - Configurar 2FA
GET  /manage/info     - Info del usuario
POST /manage/info     - Actualizar info

Registro de usuario

curl -X POST https://localhost:5001/register \
  -H "Content-Type: application/json" \
  -d '{"email":"user@test.com","password":"Test123!"}'

Respuesta:

{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "PasswordTooShort": ["Passwords must be at least 6 characters."]
  }
}

Login

curl -X POST https://localhost:5001/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@test.com","password":"Test123!"}'

Respuesta:

{
  "tokenType": "Bearer",
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "expiresIn": 3600,
  "refreshToken": "CfDJ8NrAq..."
}

Customización

Cambiar expiración de tokens

builder.Services.AddIdentityApiEndpoints<IdentityUser>(options =>
{
    options.Password.RequiredLength = 8;
    options.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<AppDbContext>();

builder.Services.Configure<BearerTokenOptions>(options =>
{
    options.BearerTokenExpiration = TimeSpan.FromHours(1);
    options.RefreshTokenExpiration = TimeSpan.FromDays(14);
});

Usuario custom con campos adicionales

public class AppUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}

// Program.cs
builder.Services.AddIdentityApiEndpoints<AppUser>()
    .AddEntityFrameworkStores<AppDbContext>();

app.MapIdentityApi<AppUser>();

Roles

builder.Services.AddIdentityApiEndpoints<AppUser>()
    .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<AppDbContext>();

// Seed roles
using var scope = app.Services.CreateScope();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
await roleManager.CreateAsync(new IdentityRole("Admin"));
await roleManager.CreateAsync(new IdentityRole("User"));

Cuándo usar Identity Endpoints

Usar cuando:

  • API simple con autenticación básica
  • Proyecto pequeño/mediano
  • No necesitas OAuth2/OIDC
  • Solo tu propia app consume la API

NO usar cuando:

  • Múltiples aplicaciones (SSO)
  • Necesitas OAuth2 flows (authorization code, etc)
  • Integración con proveedores externos (Google, Azure AD)
  • Multi-tenancy complejo
  • Enterprise con requisitos de compliance

Comparativa

Feature Identity Endpoints IdentityServer/Duende
Setup 5 minutos 2+ horas
OAuth2/OIDC
SSO
External providers
Costo Gratis Gratis/$1500+
Complejidad Baja Alta

Mi experiencia

Usé Identity Endpoints para un MVP de 3 meses. Perfecto para validar idea rápido.

Cuando crecimos y necesitamos:

  • App móvil separada
  • Panel de administración
  • SSO con cliente enterprise

Migramos a Duende IdentityServer.

Conclusión: Identity Endpoints es genial para empezar. No te cases con él si sabes que vas a escalar.

¿Has probado los nuevos Identity Endpoints? ¿Para qué tipo de proyectos los usarías?


 Anterior      Posterior

Por Vicente José Moreno Escobar el 15 de abril de 2024
Archivado en: .NET   Autenticación   APIs



Puedes disfrutar de otros artículos como éste en el archivo del sitio.