Skip to content

Implementacija JWT autentifikacije i server-side logout #5

@nemanjaASE

Description

@nemanjaASE

Trenutna implementacija

Trenutno sistem ne koristi autentifikaciju. Svako može da pristupi svim endpointima, odnosno svako ima pristup korisnicima.

Zadatak:

Implementirati token based autentifikaciju koristeći JWT (JSON Web Token). Omogućiti da samo ulogovani korisnik može da pristupi stranici Users i da može da pristupi endpoint-ima za upravljanje korisnicima. Korisnik se na sistem prijavljuju putem forme za prijavu.

Radi jednostavnosti implementacije, unapred zadati jednog korisnika u bazi podataka i putem njegovih kredencijala pristupati sistemu. On u odnosu na druge korisnike ima dodatna polja email i password. Lozinku obavezno čuvati kao hešovanu vrednost. Preporuka:

  • Kreirati poseban endpoint za unos korisnika koji ima pristup sistemu:
 - POST <API_PREFIX>/admins/register
  • Poslati zahtev preko Postman-a za kreiranje administratorskog naloga

Backend

  1. Endpoint za prijavu:
   - POST <API_PREFIX>/auth/login
  1. Prijavljuje se putem:

    • email
    • password
  2. Zaštititi endpoint-i:

    • Svi endpoint-i koji su vezani za korisnika
  3. Middleware

    • Naziv middleware-a: auth_required
    • Proverava validnost JWT
    • Proverava da li je token u blacklist (revoked token u Redis bazi)
  4. Token validacija:

    • Definisati secret key u .env fajla
    • Postaviti expiration (npr. 30min)
  5. Dodati Logout opciju za prijavljenje korisnike

      - POST <API_PREFIX>/auth/logout
  • Prima JWT u Authorization header-u:
  • Dodaje token u blacklist (Redis baza) tako da se više ne može koristiti

Frontend

  1. Login forma šalje email i password

  2. Nakon uspešne prijave:

    • Sačuvati JWT (HttpOnly cookie)
    • Koristiti JWT za svaki zaštićeni zahtev
 Authorization: Bearer <token>
  1. Logout dugme

Reference:

Metadata

Metadata

Assignees

Labels

backendBackend relateddatabaseDatabase relatedenhancementNew feature or requestfrontendFrontend related

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions