API de autenticación completa construida en Go con Gin. Implementa registro, login, manejo de tokens JWT, roles, recuperación de contraseña y autenticación de dos factores (2FA).
- Go + Gin — servidor HTTP
- PostgreSQL + GORM — base de datos
- JWT — access token y refresh token
- bcrypt — hash de contraseñas
- TOTP — autenticación de dos factores
- Swagger — documentación interactiva
- Registro y login con validación
- Access token (24hs) y refresh token (7 días) con rotación
- Logout con invalidación real del token
- Roles de usuario (
user,admin) con middleware de permisos - Bloqueo de cuenta tras 5 intentos fallidos
- Recuperación de contraseña con token temporal
- Cambio de contraseña estando autenticado
- 2FA con TOTP compatible con Google Authenticator
- Rate limiting por IP
| Método | Ruta | Autenticación |
|---|---|---|
| POST | /auth/register |
No |
| POST | /auth/login |
No |
| POST | /auth/refresh |
No |
| POST | /auth/forgot-password |
No |
| POST | /auth/reset-password |
No |
| GET | /auth/me |
Bearer token |
| POST | /auth/logout |
Bearer token |
| PUT | /auth/change-password |
Bearer token |
| GET | /auth/totp/setup |
Bearer token |
| POST | /auth/totp/enable |
Bearer token |
| POST | /auth/totp/disable |
Bearer token |
| GET | /admin/dashboard |
Bearer token + rol admin |
- Go 1.21+
- PostgreSQL
- Cloná el repositorio
git clone https://github.com/Ramiro-9/auth-api.git
cd auth-api- Instalá las dependencias
go mod tidy- Creá el archivo
.enven la raíz del proyecto
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=tu_password
DB_NAME=auth_api
JWT_SECRET=un_secreto_largo_y_random
JWT_EXPIRY_HOURS=24
REFRESH_TOKEN_EXPIRY_DAYS=7
SERVER_PORT=8080-
Creá la base de datos
auth_apien PostgreSQL -
Corré el servidor
go run ./cmd/Las tablas se crean automáticamente al iniciar.
Con el servidor corriendo, abrí en el navegador:
http://localhost:8080/swagger/index.html
Desde ahí podés explorar y probar todos los endpoints de forma interactiva.