.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?
Por Vicente José Moreno Escobar el
15 de
abril
de
2024
Puedes disfrutar de otros artículos como éste en el archivo del sitio.