Sikkerhet - aTrueYety/idatt2106-2025-09-backend GitHub Wiki
Denne siden beskriver sikkerhetsarkitekturen og praksisene som er brukt i systemet. Applikasjonen benytter moderne autentisering med JWT, autorisering basert på roller, inputvalidering, sikker e-posthåndtering og beskyttelse mot vanlige sikkerhetstrusler.
Autentisering implementeres via Spring Security med BCryptPasswordEncoder
og JWT-token.
- Brukere kan registrere seg med gyldig e-post, unikt brukernavn og sterkt passord.
- Login validerer passord og returnerer JWT-token med følgende claims:
username
userId
isAdmin
isSuperAdmin
Token signeres med HMAC SHA-256 via JwtService
. Tokenverifisering skjer i JwtAuthenticationFilter
og WebSocket-interceptor.
WebSocket-endepunktet /ws
støtter JWT-beskyttet tilkobling:
- Token sendes som URL-parameter
/ws?token=<jwt>
-
WebSocketAuthHandshakeInterceptor
validerer token og legger bruker-ID i konteksten. - Tilgang kontrolleres på server via STOMP-topic-ruting.
Sekvensdiagram av ws oppkobling mot posisjonsdelingsendepunktet:
Brukere kan ha følgende roller:
-
Vanlig bruker (
ROLE_USER
) -
Admin (
ROLE_ADMIN
) -
Superadmin (
ROLE_SUPER_ADMIN
)
Brukere kan oppgraderes til admin via e-postinvitasjon og registreringsnøkkel.
- Passord må være minst 8 tegn, og inneholde både bokstaver og tall.
- Endring av passord krever gyldig nåværende passord.
- Brukere kan ikke endre til et brukernavn som allerede eksisterer.
- E-postendringer re-initialiserer e-postbekreftelse.
Systemet bruker Gmail SMTP for utsending av:
- Velkomstmail
- Admin-invitasjon
- Passord-reset
Reset-lenken inneholder en UUID-basert nøkkel, lagret midlertidig i password_reset_key
-tabellen. E-post sendes med EmailService
og HTML-maler fra EmailTemplates
.
Alle eksterne forespørsler valideres eksplisitt via Validate
-verktøysklasse:
- Ikke-null
- Ikke-tom streng
- Regex-sjekk for e-post
- Brukertilgang kontrolleres eksplisitt i sensitive endepunkter
CorsConfig
begrenser forespørsler til tillatte domener via:
-
spring.cors.allowed-origins
(http://localhost:3000
,http://localhost:4000
i utvikling) - Kun spesifikke HTTP-metoder og headers er tillatt.
Sensitiv data som databasepassord og hemmelige nøkler skal legges i en .env fil. Les mer om hva slags variabler som kreves for kjøring av prosjektet under installasjon
For autentisering i frontend brukes next-auth. Når en bruker logger seg inn sender next-serveren en forespørsel til backend om token, før det genereres en sesjon. I denne sesjonen lagres tokenen fra backend, som videre sendes med i hver forespørsel. Dette betyr at alle api-kall til backenden kan både skje på klient- eller serverside, noe som videre også er viktig for lastetid og sikkerhet.