WebSockets ja reaaliaikaiset järjestelmät Springillä · Oppitunti

Spring Securityn integrointi

Integroikaa Spring Security WebSocket-yhteyksien ja viestivirtojen suojaamiseksi.

Oppitunti 2/411 vaihetta

Spring Securityn integrointi on ilmainen WebSockets ja reaaliaikaiset järjestelmät Springillä-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu WebSockets ja reaaliaikaiset järjestelmät Springillä-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssilla on yhteensä 4 oppituntia.

Suojaa reaaliaikaiset sovelluksesi

Reaaliaikaisten ominaisuuksien, kuten WebSocketien, integrointi sovelluksiin on innostavaa, mutta tietoturva on ensiarvoisen tärkeää. Perinteisten HTTP-päätepisteiden tapaan myös WebSocket-yhteydet ja viestivirrat on suojattava.

  • Tietojen eheys: estä viestien luvaton muuttaminen.
  • Luottamuksellisuus: varmista, että vain valtuutetut käyttäjät voivat lukea arkaluonteisia tietoja.
  • Käyttöoikeuksien hallinta: hallitse, kuka voi muodostaa yhteyden, lähettää viestejä tai tilata aiheita.

Spring Security tarjoaa tehokkaan kehyksen WebSocket-päätepisteiden tehokkaaseen suojaamiseen.

Tietoturvan keskeiset riippuvuudet

Spring WebSocket -sovelluksen suojaamisen aloittamiseksi projektiin on lisättävä tarvittavat Spring Security -riippuvuudet. Jos käytät Spring Bootia, niiden lisääminen on yleensä helppoa.

Tarvitset ensisijaisesti seuraavat:

  • spring-boot-starter-security: tarjoaa Spring Securityn keskeiset ominaisuudet.
  • spring-security-messaging: on tarkoitettu erityisesti Springin viestintäinfrastruktuurin, kuten WebSocketien ja STOMP:n, suojaamiseen.

Jos käytit Spring Initializr -työkalua, varmista, että nämä sisältyvät tiedostoon pom.xml (Maven) tai build.gradle (Gradle).

HTTP-tietoturvan perusta

WebSocket-yhteydet alkavat yleensä HTTP-kättelyllä. Siksi Spring Securityn nykyinen HTTP-tietoturvamääritys muodostaa WebSocket-tietoturvan perustan.

Ennen kuin viestejä aletaan välittää WebSocketien kautta, käyttäjä todennetaan yleensä tavallisella HTTP-kirjautumisella. Spring Security hyödyntää sitten tätä todennettua istuntoa myöhempien WebSocket-toimintojen suojaamiseen. HTTP-tietoturvan vähimmäismääritys voisi näyttää tältä:

@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .formLogin(withDefaults()); return http.build(); }

Tämä varmistaa, että kaikki HTTP-pyynnöt edellyttävät todennusta, mikä on ratkaisevan tärkeää WebSocket-kättelyn kannalta.

Ota WebSocket-tietoturva käyttöön

Kun HTTP-tietoturvan perusmääritys on paikallaan, Spring Securitylle on ilmoitettava, että myös WebSocket-viestit on suojattava. Tämä tehdään lisäämällä @EnableWebSocketSecurity-annotaatio.

Annotaatio sijoitetaan yleensä määritysluokkaan, joka laajentaa luokkaa WebSocketMessageBrokerConfigurer. Näin sekä WebSocket-viestinvälittäjää että sen tietoturvasääntöjä voi mukauttaa yhdessä määrityksessä.

@EnableWebSocketSecurity-annotaatio ottaa käyttöön Spring Securityn viestipohjaisen STOMP-viestien valtuutuksen, joten käyttöoikeudet voidaan määrittää tarkasti.

STOMP-kohteiden suojaaminen

Spring Security integroituu STOMP-protokollaan, joten tiettyjä viestikohteita voidaan suojata. Tämä tehdään korvaamalla configureInbound()-metodi luokassa WebSocketMessageBrokerConfigurer.

Tässä metodissa käytetään luokkaa MessageSecurityMetadataSourceRegistry sääntöjen määrittämiseen kohdekuvioiden perusteella:

  • .simpDestMatchers("/app/private-chat").authenticated(): vain todennetut käyttäjät voivat lähettää viestejä tähän kohteeseen.
  • .simpDestMatchers("/topic/admin-updates").hasRole("ADMIN"): vain käyttäjät, joilla on ADMIN-rooli, voivat tilata tämän aiheen.

Tämä tarjoaa reaaliaikaisille viesteille tehokkaan, URL-osoitteiden kaltaisen tietoturvan.

Käyttäjän identiteetti WebSocketeissa

Yksi Spring Securityn integroinnin keskeisistä eduista on tapa, jolla se käsittelee käyttäjien todennuksen. Kun käyttäjä muodostaa yhteyden WebSocket-päätepisteeseen HTTP-todennuksen jälkeen, Spring Security liittää automaattisesti hänen Principal-olionsa (käyttäjän identiteetin) WebSocket-istuntoon.

Tämä tarkoittaa, että WebSocket-viesteille määritetyt tietoturvasäännöt voivat hyödyntää samaa todennus- ja valtuutuskontekstia kuin tavalliset HTTP-pyynnöt. Käyttäjiä ei tarvitse todentaa erikseen WebSocket-yhteyksiä varten.

Principal-olio on käytettävissä WebSocket-istunnossa, joten käyttöoikeuksia voidaan arvioida todennetun käyttäjän roolien tai muiden tietojen perusteella.

Hallitse viestien lähettämistä

Palvelimelle lähetettäville viesteille, kuten /app-kohteeseen julkaisemiselle, voidaan määrittää valtuutussääntöjä. Tämä tehdään käyttämällä .simpMessageSending()-metodia luokassa MessageSecurityMetadataSourceRegistry.

Jos haluat esimerkiksi sallia viestien lähettämisen vain todennetuille käyttäjille:

messages.simpMessageSending().authenticated();

Lähettämisen voi myös rajoittaa tiettyyn rooliin:

messages.simpMessageSending().hasRole("USER");

Näin varmistetaan, että vain valtuutetut asiakkaat voivat julkaista viestejä sovelluksen sisäisille käsittelijöille.

Rajoita tilauksia

On yhtä tärkeää hallita, kuka voi tilata tietyn aiheen. Tilauspyyntöjen valtuutussäännöt voidaan määrittää käyttämällä .simpSubscribe()-metodia luokassa MessageSecurityMetadataRegistry.

Voit esimerkiksi sallia kaikille tilauksen julkisesta aiheesta mutta vain ylläpitäjille tilauksen yksityisestä aiheesta:

messages .simpSubscribeDestMatchers("/topic/public").permitAll() .simpSubscribeDestMatchers("/topic/private-admin").hasRole("ADMIN");

Tämä estää luvattomia käyttäjiä vastaanottamasta viestejä, jotka on tarkoitettu tietyille ryhmille tai rooleille.

Esimerkki: kohteiden suojaaminen

Tarkastellaan minimaalista Spring Boot -sovellusta, joka yhdistää Spring Securityn WebSocketin STOMP-kohteiden suojaamiseksi. Esimerkissä määritetään eri käyttöoikeussäännöt julkisille, ylläpitäjille tarkoitetuille ja vain todennetuille käyttäjille avoimille kanaville.

Kun sovellus käynnistyy, se ottaa WebSocket-tietoturvan käyttöön ja määrittää säännöt tiettyihin polkuihin lähettämiselle ja tilaamiselle. Oikeassa sovelluksessa tarvitaan lisäksi HTTP-tietoturvamääritys (kuten kohtauksessa 3 mainittiin) sekä käyttäjäpalvelu todennusta varten.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.messaging.MessageSecurityMetadataSourceRegistry;
import org.springframework.security.config.annotation.web.socket.EnableWebSocketSecurity;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;

@SpringBootApplication
@EnableWebSocketMessageBroker // Enables STOMP over WebSockets
@EnableWebSocketSecurity // Enables Spring Security for WebSocket messages
@Configuration
public class Main implements WebSocketMessageBrokerConfigurer {

  public static void main(String[] args) {
    SpringApplication.run(Main.class, args);
    System.out.println("WebSocket Security Demo Started!");
    System.out.println("Access at ws://localhost:8080/ws");
  }

  // Configure STOMP endpoints (e.g., /ws)
  @Override
  public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/ws").withSockJS();
  }

  // Configure message broker (e.g., /topic, /app)
  @Override
  public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/topic", "/queue");
    registry.setApplicationDestinationPrefixes("/app");
  }

  // Configure message security rules for inbound messages
  @Override
  protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
    messages
      // Allow anyone to subscribe to /topic/public
      .simpSubscribeDestMatchers("/topic/public").permitAll()
      // Only ADMIN role can subscribe to /topic/admin
      .simpSubscribeDestMatchers("/topic/admin").hasRole("ADMIN")
      // Authenticated users can send messages to /app/private
      .simpDestMatchers("/app/private").authenticated()
      // Deny all other message types/destinations by default
      .anyMessage().denyAll();
  }
}

Määritä käyttöoikeudet

Kuvitellaan, että rakennatte reaaliaikaista sovellusta, jossa on chat-huoneita. STOMP-viesteille on määritettävä seuraavat tietoturvasäännöt:

  • Asiakkaat voivat lähettää viestejä kohteeseen /app/general-chat vain, jos heidät on todennettu.
  • Vain käyttäjät, joilla on MODERATOR-rooli, voivat tilata kohteen /topic/moderator-alerts.
  • Kaikki muut viestityypit tai kohteet, joita ei ole erikseen sallittu, on oletusarvoisesti estettävä.

Mitä Spring Security -sääntöjä soveltaisitte alla olevista vaihtoehdoista?

Kertaus: suojaa reaaliaikaiset sovelluksesi

Olette oppineet yhdistämään Spring Securityn WebSocket-sovelluksiinne reaaliaikaisen viestinnän suojaamiseksi. Tässä lyhyt yhteenveto:

  • Lisätkää riippuvuudet spring-boot-starter-security ja spring-security-messaging.
  • Varmistakaa, että HTTP-tietoturvan perusmääritys on olemassa, sillä WebSocket-tietoturva rakentuu sen varaan.
  • Ottakaa viestitason tietoturva käyttöön käyttämällä annotaatiota @EnableWebSocketSecurity.
  • Korvatkaa configureInbound() luokassa WebSocketMessageBrokerConfigurer sääntöjen määrittämiseksi.
  • Käyttäkää luokkaa MessageSecurityMetadataSourceRegistry yhdessä metodien .simpDestMatchers(), .simpMessageSending() ja .simpSubscribeDestMatchers() kanssa valtuutuksen toteuttamiseen.
  • Hyödyntäkää metodeja .authenticated(), .hasRole() ja .permitAll() sekä metodia .anyMessage().denyAll() vahvan tietoturvan varmistamiseksi.

Näitä vaiheita noudattamalla voitte varmistaa, että reaaliaikaiset sovelluksenne ovat turvallisia ja luotettavia!

Aloita maksutta

Opi WebSockets ja reaaliaikaiset järjestelmät Springillä tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Spring Securityn integrointi” ilmainen?

Kyllä – oppitunnin ”Spring Securityn integrointi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssin, päivitä CoddyKit PROhon. WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Spring Securityn integrointi”?

Integroikaa Spring Security WebSocket-yhteyksien ja viestivirtojen suojaamiseksi. Harjoittelet WebSockets ja reaaliaikaiset järjestelmät Springillä-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni WebSockets ja reaaliaikaiset järjestelmät Springillä-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin WebSockets ja reaaliaikaiset järjestelmät Springillä-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Spring Securityn integrointi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä WebSockets ja reaaliaikaiset järjestelmät Springillä-oppitunnilla?

Kyllä. Jokainen WebSockets ja reaaliaikaiset järjestelmät Springillä-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. WebSocketien tietoturvanäkökohdat
  2. Spring Securityn integrointi
  3. Todennus ja valtuutus
  4. Liikenteen salaus TLS:llä ja wss://-protokollalla
← Takaisin: WebSockets ja reaaliaikaiset järjestelmät Springillä