REST API stworzone w ASP.NET Core, umożliwiające rejestrację, logowanie oraz zarządzanie kontem użytkownika.
- Rejestracja użytkownika
- Logowanie użytkownika (JWT)
- Mechanizm Refresh Token z rotacją tokenów
- Endpoint odświeżania tokena (Refresh)
- Wylogowanie użytkownika (unieważnianie refresh tokena)
- Zarządzanie kontem użytkownika
- Zmiana hasła użytkownika
- Wymuszona zmiana hasła przy użyciu hasła tymczasowego
- Funkcja "Forgot password" z wysyłką hasła tymczasowego e-mailem
- Reset licznika błędnych logowań po poprawnej autoryzacji
- Hashowanie haseł (PasswordHasher)
- Walidacja danych wejściowych (FluentValidation)
- Globalna obsługa wyjątków (middleware)
- NLog – logowanie do plików i konsoli
- Swagger / OpenAPI
- Role użytkowników przechowywane w bazie danych (
User,Admin) - Role przekazywane jako claims w tokenie JWT
- Autoryzacja oparta o Role-Based Authorization
- Ograniczenie dostępu do wybranych endpointów przy użyciu atrybutu:
[Authorize(Roles = "Admin")]
-Kontrola dostępu do zasobów w zależności od roli użytkownika
- Hasła przechowywane wyłącznie w postaci hashy
- Weryfikacja starego hasła przed zmianą
- Obsługa błędnych prób logowania
- Hasła tymczasowe z wymuszoną zmianą przy logowaniu
- Autoryzacja oparta o JWT i claims
- Ochrona wrażliwych endpointów przed dostępem nieautoryzowanym
- Access Token posiada krótki czas ważności
- Refresh Token przechowywany jest w bazie danych
- Możliwość unieważnienia sesji użytkownika poprzez logout
- Controllers – obsługa endpointów API
- Services – logika biznesowa
- Entities – encje domenowe i kontekst bazy danych
- Middleware – globalna obsługa błędów
- Exceptions – własne wyjątki aplikacyjne
- Migrations – migracje bazy danych (EF Core)
- ASP.NET Core (.NET 8)
- C#
- Entity Framework Core
- JWT Authentication
- FluentValidation
- Swagger
Projekt zawiera testy jednostkowe logiki biznesowej (warstwa Services), napisane przy użyciu:
- xUnit – framework testowy
- Moq – mockowanie zależności
- Entity Framework Core InMemory – testowa baza danych
Testy obejmują m.in.:
- rejestrację użytkownika
- poprawne logowanie użytkownika
- logowanie z błędnym hasłem
- próbę logowania nieistniejącego użytkownika
- generowanie refresh tokena po logowaniu
- odświeżanie access tokena przy użyciu refresh tokena
- walidację niepoprawnego refresh tokena
- unieważnianie sesji użytkownika po wylogowaniu
Projekt zawiera również testy integracyjne API, które uruchamiają aplikację w środowisku testowym przy użyciu WebApplicationFactory.
Testy integracyjne obejmują m.in.:
- rejestrację użytkownika poprzez endpoint API
- logowanie użytkownika i weryfikację generowania tokenów JWT
- dostęp do chronionych endpointów z tokenem oraz bez tokena
- weryfikację poprawnego działania autoryzacji i middleware
Aplikacja została wdrożona w Azure App Service i jest dostępna publicznie pod adresem dla Swagger UI: https://account-api-app-c6gaa8cug4bsendw.westeurope-01.azurewebsites.net/swagger/index.html
Projekt wykorzystuje następujące usługi w chmurze Microsoft Azure:
- Azure App Service – hosting aplikacji Web API
- Azure SQL Database – baza danych aplikacji
- Azure App Service Deployment Center – integracja z GitHub
Aplikację można uruchomić przy użyciu Docker Compose:
docker compose up --buildPo uruchomieniu aplikacja dostępna jest pod adresem: https://localhost:5000/swagger
- Sklonuj repozytorium
- Skonfiguruj connection string w
appsettings.json - Wykonaj migracje bazy danych
- Uruchom aplikację
- Otwórz Swagger: https://localhost:7290/swagger
Projekt stworzony jako część portfolio backendowego, prezentujący implementację bezpiecznego REST API w ASP.NET Core z autoryzacją JWT, mechanizmem refresh token, rolami użytkowników oraz testami jednostkowymi.