Skip to content

AdrianoReusSavi/authcore-api

Repository files navigation

🔐 AuthCore API

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.

✨ Funcionalidades

  • 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)

🏗️ Arquitetura

Estrutura baseada em separação clara de responsabilidades:

  • Authcore.Api
  • Authcore.Application
  • Authcore.Domain
  • Authcore.Infrastructure

Domain

  • Entidades
  • Regras de negócio
  • Interfaces
  • Value Objects

Application

  • UseCases
  • DTOs
  • Contratos
  • Orquestração de regras

Infrastructure

  • EF Core
  • Implementação de repositórios
  • JWT Service
  • Persistência de Refresh Tokens
  • UnitOfWork

Api

  • Controllers
  • Middlewares
  • Policies
  • Configuração de autenticação

🔐 Autenticação

Access Token

  • JWT assinado
  • Curta duração
  • Contém claims de usuário e roles

Refresh Token

  • Token aleatório (não JWT)
  • Armazenado como hash
  • Rotação obrigatória a cada uso
  • Revogável (logout)

Fluxo

  • Login → Access + Refresh
  • Refresh → Novo Access + Novo Refresh
  • Logout → Revoga Refresh Token

🛡 Segurança Implementada

  • 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

👤 Área Administrativa

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.


🚀 Como Executar

  • 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 ConnectionStrings e Jwt no appsettings.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

🧠 Conceitos Aplicados

  • 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

🧩 Stack

  • .NET
  • ASP.NET Core
  • Entity Framework Core
  • JWT
  • PostreSQL

About

Clean Architecture authentication API built with .NET, featuring JWT, refresh token rotation, role-based authorization, and admin policy protection.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages