API de autenticação e autorização construída com .NET, seguindo princípios de Clean Architecture, com foco em segurança, organização e boas práticas.
- Registro de usuário
- Login com JWT (Access Token)
- Refresh Token com rotação
- Logout com revogação de token
- Autorização baseada em Roles
- Policy
AdminOnly - Rate limiting no login
- Seeder automático (roles + admin)
Estrutura baseada em separação clara de responsabilidades:
- Authcore.Api
- Authcore.Application
- Authcore.Domain
- Authcore.Infrastructure
- Entidades
- Regras de negócio
- Interfaces
- Value Objects
- UseCases
- DTOs
- Contratos
- Orquestração de regras
- EF Core
- Implementação de repositórios
- JWT Service
- Persistência de Refresh Tokens
- UnitOfWork
- Controllers
- Middlewares
- Policies
- Configuração de autenticação
- JWT assinado
- Curta duração
- Contém claims de usuário e roles
- Token aleatório (não JWT)
- Armazenado como hash
- Rotação obrigatória a cada uso
- Revogável (logout)
- Login → Access + Refresh
- Refresh → Novo Access + Novo Refresh
- Logout → Revoga Refresh Token
- Senhas com hash seguro
- Refresh token armazenado como hash
- Rotação de refresh token
- Revogação explícita no logout
- Policy-based authorization
- Proteção de endpoints administrativos
- Rate limiting no endpoint de login
Endpoints protegidos por:
[Authorize(Policy = "AdminOnly")]Endpoints
PATCH /api/admin/users/{id}/deactivate
POST /api/admin/users/{id}/roles/{role}
DELETE /api/admin/users/{id}/roles/{role}Requer role Admin.
- Subir o banco de dados (PostgreSQL via Docker)
docker run -d \
--name database-name \
-e POSTGRES_DB=database \
-e POSTGRES_USER=username \
-e POSTGRES_PASSWORD=password \
-p 5432:5432 \
postgres:16- Configure
ConnectionStringseJwtnoappsettings.json
{
"ConnectionStrings": {
"Default": "Host=localhost;Port=5432;Database=database;Username=username;Password=password"
},
"Jwt": {
"SecretKey": "YOUR_SUPER_SECRET_KEY_WITH_32+_CHARACTERS",
"Issuer": "issuer",
"Audience": "audience",
"ExpirationInMinutes": 1
}
}- Crie e execute as migrations
dotnet ef migrations add InitialCreate -p Authcore.Infrastructure -s Authcore.Api
dotnet ef database update -p Authcore.Infrastructure -s Authcore.Api- Rode o projeto
dotnet run --project Authcore.Api- O seeder criará automaticamente:
- Roles padrão
- Usuário administrador inicial
- Clean Architecture
- SOLID
- Repository Pattern
- Unit of Work
- Policy-based Authorization
- Token Rotation Strategy
- Hash de dados sensíveis
- Middleware customizado
- Separação de camadas
- .NET
- ASP.NET Core
- Entity Framework Core
- JWT
- PostreSQL