Spring Security 6 ja JWT-todennus · Oppitunti

AuthenticationManagerin ja Provider-integraatio

Yhdistä JWT-suodatin Spring Securityn `AuthenticationManager`-komponenttiin ja mukautettuihin todennuspalveluntarjoajiin.

Oppitunti 3/411 vaihetta

AuthenticationManagerin ja Provider-integraatio on ilmainen Spring Security 6 ja JWT-todennus-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Spring Security 6 ja JWT-todennus-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Security 6 ja JWT-todennus-kurssilla on yhteensä 4 oppituntia.

Todennuksen koordinointi

Tervetuloa Spring Securityn todennusprosessin ytimeen! Tänään yhdistämme JWT-suotimemme kahteen tärkeään komponenttiin: AuthenticationManager ja AuthenticationProvider.

Nämä komponentit toimivat yhdessä käyttäjän henkilöllisyyden tarkistamiseksi ja tietoturvakontekstin muodostamiseksi.

Managerin keskeinen tehtävä

AuthenticationManager on Spring Securityn keskeinen rajapinta todennuspyyntöjen käsittelyyn. Ajatelkaa sitä orkesterin kapellimestarina.

  • Se vastaanottaa Authentication-olion, joka edustaa käyttäjän tunnistetietoja.
  • Se delegoi varsinaisen todennustehtävän yhdelle tai useammalle AuthenticationProvider-komponentille.
  • Onnistuneen todennuksen jälkeen se palauttaa täysin todennetun Authentication-olion.

AuthenticationProviderin rooli

Kun AuthenticationManager koordinoi toimintaa, AuthenticationProvider-komponentit ovat erikoistuneita suorittajia.

Kukin provider osaa todentaa tietyn tyyppisen käyttäjän tai tunnistetiedon (esim. käyttäjänimen ja salasanan, LDAP:n tai tässä tapauksessa JWT:n). Se sisältää tunnistetietojen tarkistamiseen tarvittavan logiikan.

JWT-token-olion luominen

JWT-kulkuamme varten tarvitsemme tavan esittää todentamaton JWT Spring Securityssä. Luomme mukautetun Authentication-toteutuksen, jonka nimi on usein JwtAuthenticationToken.

  • Se sisältää todentamattomana raakamuotoisen JWT-merkkijonon.
  • Todennuksen jälkeen se sisältää todennetun käyttäjän tiedot (UserDetails) ja oikeudet.

JWT-providerin rakentaminen

Luodaan nyt oma JwtAuthenticationProvider. Tämä luokka toteuttaa AuthenticationProvider-rajapinnan.

Sen päätehtävä on vastaanottaa JwtAuthenticationToken, validoida JWT, poimia käyttäjän tiedot ja palauttaa täysin autentikoitu token.

JwtAuthenticationProviderin logiikka

Tässä on yksinkertaistettu esimerkki siitä, mitä JwtAuthenticationProvider-luokan authenticate-metodi voisi tehdä. Se tarkistaa, onko token kelvollinen, ja muodostaa sitten autentikoidun olion.

import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.GrantedAuthority;
import java.util.Collections;

public class CustomJwtAuthProvider implements AuthenticationProvider {

  @Override
  public Authentication authenticate(Authentication authentication)
      throws AuthenticationException {
    // In a real app, you'd validate the JWT here.
    // For this example, we'll assume it's valid if it's our custom type.
    if (authentication instanceof JwtAuthenticationToken) {
      // Simulate successful JWT validation
      // Extract username and roles from the JWT payload
      String username = "coddykitUser"; // From JWT subject
      // Roles would also come from JWT claims
      // For simplicity, we grant a basic role
      GrantedAuthority role = () -> "ROLE_USER";
      User userDetails = new User(username, "", Collections.singletonList(role));

      // Return a fully authenticated token
      // The credentials (JWT string) are usually cleared
      return new JwtAuthenticationToken(userDetails, Collections.singletonList(role));
    }
    return null; // Not our type of authentication
  }

  @Override
  public boolean supports(Class<?> authentication) {
    // This provider supports our custom JwtAuthenticationToken
    return JwtAuthenticationToken.class.isAssignableFrom(authentication);
  }

  // Simple placeholder for our custom token
  static class JwtAuthenticationToken implements Authentication {
    private final User userDetails;
    private final String jwtToken;
    private boolean authenticated;
    private java.util.Collection<? extends GrantedAuthority> authorities;

    public JwtAuthenticationToken(String jwtToken) {
      this.jwtToken = jwtToken;
      this.userDetails = null;
      this.authenticated = false;
      this.authorities = Collections.emptyList();
    }

    public JwtAuthenticationToken(User userDetails,
                                  java.util.Collection<? extends GrantedAuthority> authorities) {
      this.userDetails = userDetails;
      this.jwtToken = null; // Token already validated
      this.authenticated = true;
      this.authorities = authorities;
    }

    @Override
    public java.util.Collection<? extends GrantedAuthority> getAuthorities() {
      return authorities;
    }

    @Override
    public Object getCredentials() {
      return jwtToken; // The raw JWT string (if unauthenticated)
    }

    @Override
    public Object getDetails() {
      return userDetails;
    }

    @Override
    public Object getPrincipal() {
      return userDetails; // The authenticated user object
    }

    @Override
    public boolean isAuthenticated() {
      return authenticated;
    }

    @Override
    public void setAuthenticated(boolean isAuthenticated)
        throws IllegalArgumentException {
      this.authenticated = isAuthenticated;
    }

    @Override
    public String getName() {
      return userDetails != null ? userDetails.getUsername() : "N/A";
    }
  }

  public static void main(String[] args) {
    System.out.println("CustomJwtAuthProvider initialized.");
    // In a real app, Spring Security would call authenticate()
    // We're just demonstrating the class structure here.
  }
}

Providerin käyttöönotto

Jotta JwtAuthenticationProvider voidaan ottaa käyttöön, se on rekisteröitävä Spring Securityn konfiguraatioon. Tämä tehdään yleensä security-konfiguraatioluokassa.

Spring Boot määrittää usein AuthenticationManager-komponentin automaattisesti, mutta voimme lisätä siihen mukautettuja providereita.

Suodattimen ja managerin vuorovaikutus

Muistatteko edellisestä oppitunnista mukautetun JwtAuthenticationFilter-suodattimemme? Nyt yhdistämme sen AuthenticationManager-komponenttiin.

  • Suodatin poimii JWT:n pyynnöstä.
  • Se luo autentikoimattoman JwtAuthenticationToken-tokenin.
  • Sen jälkeen se välittää tämän tokenin AuthenticationManager-komponentille käsiteltäväksi.

Manageri puolestaan etsii ja käyttää JwtAuthenticationProvider-provideriamme.

JWT-autentikoinnin kulku

Käydään läpi koko autentikointiprosessi uusien komponenttiemme avulla:

  1. Asiakas lähettää JWT:n sisältävän pyynnön Authorization-otsakkeessa.
  2. JwtAuthenticationFilter sieppaa pyynnön ja poimii JWT:n.
  3. Suodatin luo autentikoimattoman JwtAuthenticationToken-tokenin.
  4. Suodatin kutsuu metodia AuthenticationManager.authenticate() tämän tokenin kanssa.
  5. AuthenticationManager löytää JwtAuthenticationProvider-providerimme, koska supports() palauttaa arvon true.
  6. JwtAuthenticationProvider validoi JWT:n ja muodostaa täysin autentikoidun JwtAuthenticationToken-tokenin, joka sisältää UserDetails-tiedot ja käyttöoikeudet.
  7. Suodatin vastaanottaa autentikoidun tokenin ja asettaa sen SecurityContextHolder-komponenttiin.
  8. Pyyntö jatkuu, ja nyt tiedetään, kuka käyttäjä on ja mitä hän voi tehdä!

Kulun ymmärtäminen

Mitkä väittämät kuvaavat oikein AuthenticationManager- ja AuthenticationProvider-komponenttien rooleja Spring Securityn JWT-asetuksissa?

Kokonaisuuden yhdistäminen

Tässä oppitunnissa olemme tarkastelleet, kuinka AuthenticationManager toimii keskeisenä koordinoijana ja kuinka mukautettu AuthenticationProvider käsittelee JWT:iden validointiin liittyvän erityislogiikan.

Integroimalla nämä komponentit JwtAuthenticationFilter-suodattimeemme olemme toteuttaneet vankan ja modulaarisen JWT-autentikoinnin työnkulun Spring Securityssä. Vastuiden erottelu tekee security-konfiguraatiosta joustavan ja helposti ylläpidettävän!

Aloita maksutta

Opi Java 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 ”AuthenticationManagerin ja Provider-integraatio” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Spring Security 6 ja JWT-todennus-oppimispolun 3 oppituntia, myös oppitunnin “AuthenticationManagerin ja Provider-integraatio”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Spring Security 6 ja JWT-todennus-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”AuthenticationManagerin ja Provider-integraatio”?

Yhdistä JWT-suodatin Spring Securityn `AuthenticationManager`-komponenttiin ja mukautettuihin todennuspalveluntarjoajiin. Harjoittelet Spring Security 6 ja JWT-todennus-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Spring Security 6 ja JWT-todennus-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Security 6 ja JWT-todennus-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”AuthenticationManagerin ja Provider-integraatio”-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ä Spring Security 6 ja JWT-todennus-oppitunnilla?

Kyllä. Jokainen Spring Security 6 ja JWT-todennus-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. JWT-todennusvirran suunnittelu
  2. Mukautetun JWT-suodattimen toteuttaminen
  3. AuthenticationManagerin ja Provider-integraatio
  4. Todennusvirheiden ja aloituspisteiden käsittely
← Takaisin: Spring Security 6 ja JWT-todennus