WebSockets og sanntidssystemer med Spring · leksjon

Autentisering og autorisering

Implementer autentisering for WebSocket-brukere, og autoriser tilgang basert på roller og tillatelser.

Leksjon 3 av 411 trinn

Autentisering og autorisering er en gratis leksjon i WebSockets og sanntidssystemer med Spring på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i WebSockets og sanntidssystemer med Spring, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i WebSockets og sanntidssystemer med Spring inneholder totalt 4 leksjoner.

Sikring av sanntidsinteraksjoner

Velkommen til den siste leksjonen om sikring av WebSocket-endepunktene Deres! I dag skal vi se nærmere på hvordan brukere autentiseres og handlingene deres autoriseres.

Autentisering handler om å bekrefte hvem en bruker er (for eksempel ved pålogging). Autorisering handler om å avgjøre hva en autentisert bruker har lov til å gjøre (for eksempel tilgang til administratorfunksjoner).

Begge deler er avgjørende for å hindre uautorisert tilgang og sikre dataintegriteten i sanntidsapplikasjonene Deres.

Koble sammen HTTP-autentisering

Når De bruker Spring Security, kobles den eksisterende autentiseringen av HTTP-økten på en smart måte sammen med WebSocket-øktene. Det betyr at en bruker som allerede er logget inn via webapplikasjonen, automatisk også er autentisert for WebSocket-kommunikasjon.

Spring knytter den autentiserte brukerens Principal (som representerer brukeren) til WebSocket-økten, slik at det blir enkelt å identifisere hvem som sender eller mottar meldinger.

Finn WebSocket-brukeren

Når en bruker er autentisert, kan De få direkte tilgang til brukerens Principal-objekt i metodene som håndterer STOMP-meldinger. Dermed kan De tilpasse svar eller loggføre brukerspesifikke handlinger.

Prøv å kjøre dette enkle Java-eksempelet for å forstå konseptet Principal:

import java.security.Principal;

public class Main {
  public static void main(String[] args) {
    // In a Spring @MessageMapping method,
    // you'd get Principal directly from the framework.
    // This simulates an authenticated user for demonstration.
    Principal currentUser = () -> "alice@example.com";
    System.out.println("Current user: " + currentUser.getName());
  }
}

Stibasert tilgangskontroll

Spring Security tilbyr en kraftig måte å autorisere tilgang til WebSocket-destinasjoner (emner eller køer) ved hjelp av en MessageMatcherRegistry. Dermed kan De definere regler basert på STOMP-destinasjonsstien.

Vanligvis konfigurerer De disse reglene i WebSocketSecurityConfigurer eller WebSocketMessageBrokerConfigurer, og gir eller nekter tilgang basert på roller eller autentiseringsstatus.

Sikring av bestemte destinasjoner

Her er et eksempel på hvordan MessageMatcherRegistry kan brukes til å sikre WebSocket-destinasjoner. Legg merke til hvordan ulike stier krever ulike roller eller bare autentisering.

Dette kodeeksempelet er en del av en Spring-konfigurasjon og kan ikke kjøres som et frittstående Java-program.

// Inside a WebSocketSecurityConfigurer or similar class
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
    messages
        .simpDestMatchers("/topic/public").permitAll() // Anyone can subscribe
        .simpDestMatchers("/topic/admin").hasRole("ADMIN") // Only admins
        .simpDestMatchers("/app/**").authenticated() // All app messages need auth
        .anyMessage().denyAll(); // Deny everything else by default
}

Finmasket metodesikkerhet

For enda mer detaljert kontroll kan De bruke Spring Securitys @PreAuthorize-annoteringer direkte på @MessageMapping-metodene. Da kan De definere autoriseringsregler som evalueres før metoden i det hele tatt kjøres.

Denne tilnærmingen egner seg godt for kompleks logikk, for eksempel kontroll av bestemte tillatelser eller validering av meldingsinnhold opp mot den autentiserte brukeren.

Begrens sending av meldinger

La oss se på et eksempel med @PreAuthorize. Dette sikrer at bare brukere med rollen «MODERATOR» kan sende meldinger til en administrativ kringkastingskanal, mens vanlige brukere kan sende standard chatmeldinger.

Dette kodeeksempelet er en del av en Spring-kontroller og kan ikke kjøres som et frittstående Java-program.

// Inside a @Controller or @MessageMapping class
@MessageMapping("/chat.sendMessage")
@PreAuthorize("hasRole('USER')")
public ChatMessage sendMessage(@Payload ChatMessage chatMessage, Principal principal) {
    System.out.println("User " + principal.getName() + " sent: " + chatMessage.getContent());
    // ... further processing ...
    return chatMessage;
}

@MessageMapping("/admin.broadcast")
@PreAuthorize("hasRole('MODERATOR')")
public void broadcastAdminMessage(@Payload String message) {
    System.out.println("Admin broadcast: " + message);
    // ... send admin message to all admins ...
}

Sikre private meldinger

En av de nyttige funksjonene i STOMP med Spring er den innebygde støtten for brukerspesifikke destinasjoner, som vanligvis har prefikset /user/.

Når en klient abonnerer på for eksempel /user/queue/notifications, sørger Spring for at meldinger som sendes til denne destinasjonen, bare rutes til den autentiserte brukeren som er knyttet til økten. Dette gir innebygd personvern og autorisering for kommunikasjon mellom to brukere.

Egendefinert autentiseringsflyt

Selv om integrasjonen med Spring Security ofte dekker mange tilfeller, kan De møte situasjoner som krever egendefinert autentisering (for eksempel bruk av JWT-tokener i WebSocket-hoder, uavhengig av HTTP-økter).

For slike avanserte tilfeller kan De implementere en ChannelInterceptor. Dette lar Dem inspisere og endre innkommende STOMP-meldinger, hente ut autentiseringstokener og angi Principal manuelt i meldingshodet før meldingen når kontrollerne.

Test kunnskapene Deres

Hvilke av de følgende er gyldige og effektive måter å implementere autorisasjon for WebSocket-meldinger i Spring på?

Oppsummering: Sikring av sanntidsfunksjoner

De har lært hvordan De implementerer autentisering og autorisasjon for Spring WebSocket-applikasjoner! Viktige punkter:

  • Spring Security integrerer HTTP-øktbasert autentisering sømløst med WebSockets.
  • Få tilgang til den autentiserte brukeren via Principal-objektet.
  • Bruk MessageMatcherRegistry til sti-basert autorisasjon for STOMP-destinasjoner.
  • Bruk @PreAuthorize for detaljert autorisasjon på metodenivå.
  • Utnytt /user-destinasjonen for private meldinger med innebygd sikkerhet.
  • For avanserte behov lar ChannelInterceptor Dem bruke egendefinerte autentiseringsflyter.

Ved å implementere disse strategiene kan De bygge robuste og sikre sanntidsfunksjoner!

Gratis å komme i gang

Lær deg WebSockets og sanntidssystemer med Spring med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Autentisering og autorisering» gratis?

Ja – hele teksten i «Autentisering og autorisering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av WebSockets og sanntidssystemer med Spring-kurset, kan du oppgradere til CoddyKit PRO. Kurset i WebSockets og sanntidssystemer med Spring inneholder totalt 4 leksjoner.

Hva lærer jeg i «Autentisering og autorisering»?

Implementer autentisering for WebSocket-brukere, og autoriser tilgang basert på roller og tillatelser. Du øver på WebSockets og sanntidssystemer med Spring med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med WebSockets og sanntidssystemer med Spring?

Ingen tidligere erfaring er nødvendig. WebSockets og sanntidssystemer med Spring på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Autentisering og autorisering»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne WebSockets og sanntidssystemer med Spring-leksjonen?

Ja. Alle WebSockets og sanntidssystemer med Spring-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Sikkerhetsutfordringer ved WebSocket
  2. Integrering med Spring Security
  3. Autentisering og autorisering
  4. Kryptering av trafikk med TLS og wss://
← Tilbake til WebSockets og sanntidssystemer med Spring