Skip to content

konradruta/AccountAPI

Repository files navigation

Build and deploy .NET app to Azure

API zarządzania kontami użytkowników

REST API stworzone w ASP.NET Core, umożliwiające rejestrację, logowanie oraz zarządzanie kontem użytkownika.

Funkcjonalności

  • 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 i autoryzacja

  • 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

Bezpieczeństwo

  • 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

Architektura

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

Technologie

  • ASP.NET Core (.NET 8)
  • C#
  • Entity Framework Core
  • JWT Authentication
  • FluentValidation
  • Swagger

Testy

Testy jednostkowe

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

Testy integracyjne

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

Publiczne API

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

Wykorzystane usługi Azure

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

Uruchomienie w Docker

Aplikację można uruchomić przy użyciu Docker Compose:

docker compose up --build

Po uruchomieniu aplikacja dostępna jest pod adresem: https://localhost:5000/swagger

Uruchomienie projektu

  1. Sklonuj repozytorium
  2. Skonfiguruj connection string w appsettings.json
  3. Wykonaj migracje bazy danych
  4. Uruchom aplikację
  5. Otwórz Swagger: https://localhost:7290/swagger

Cel projektu

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors