Spring Security 6 ja JWT-todennus · Oppitunti

Salasanakooderien ymmärtäminen

Tutustukaa Spring Securityn eri salasanakoodereihin ja niiden merkitykseen salasanojen turvallisessa tallennuksessa.

Oppitunti 2/411 vaihetta

Salasanakooderien ymmärtäminen on ilmainen Spring Security 6 ja JWT-todennus-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.

Miksi salasanat koodataan?

Kuvittele, että tallennat salasanasi tavalliseen tekstitiedostoon. Jokainen, joka pääsee käsiksi tiedostoon, voi nähdä ja käyttää salasanaasi heti.

Tämä on vakava tietoturvariski! Verkkosovelluksissa emme koskaan tallenna käyttäjien salasanoja selväkielisenä, luettavana tekstinä.

Hajautus ja salaus

Kun puhumme salasanojen suojaamisesta, käytämme hajautusta, emme salausta. Mikä ero näillä on?

  • Salaus: Käännettävä prosessi. Voit salata tiedot ja purkaa salauksen myöhemmin takaisin alkuperäiseen muotoon avaimen avulla.
  • Hajautus: Yksisuuntainen prosessi. Muunnat tiedot kiinteän pituiseksi merkkijonoksi (hajautusarvoksi), jonka palauttaminen alkuperäiseen muotoon on erittäin vaikeaa. Hajautusarvoa ei voi purkaa salauksesta.

Hajautus varmistaa, että tietomurron sattuessa hyökkääjät saavat vain hajautusarvoja, eivät oikeita salasanoja.

Spring Securityn rooli

Spring Security tarjoaa tehokkaat työkalut salasanojen oikeaoppiseen ja turvalliseen käsittelyyn. Se käyttää erityistä komponenttia nimeltä Password Encoder.

Tämä kooderi ottaa selväkielisen salasanan ja muuntaa sen suojatuksi tiivisteeksi ennen tallentamista. Kun käyttäjä yrittää kirjautua sisään, Spring Security koodaa hänen syöttämänsä salasanan ja vertaa uutta tiivistettä tallennettuun tiivisteeseen.

PasswordEncoder-rajapinta

Spring Securityn salasanankäsittelyn ytimessä on PasswordEncoder-rajapinta. Mitä tahansa tätä rajapintaa toteuttavaa luokkaa voidaan käyttää salasanojen koodaamiseen ja tarkistamiseen.

Se määrittelee kaksi päämetodia:

  • encode(CharSequence rawPassword): Luo tiivisteen alkuperäisestä salasanasta.
  • matches(CharSequence rawPassword, String encodedPassword): Tarkistaa, vastaako alkuperäinen salasana koodattua salasanaa.

BCryptPasswordEncoder-esittely

Yksi Spring Securityn yleisimmin suositelluista ja turvallisista salasanakoodereista on BCryptPasswordEncoder.

Miksi BCrypt on niin hyvä?

  • Suolaus: Se lisää jokaiseen salasanaan automaattisesti satunnaisen ”suolan” ennen tiivistämistä, joten samanlaiset salasanat tuottavat erilaiset tiivisteet.
  • Mukautuva tiivistys: Se on suunniteltu laskennallisesti raskaaksi, mikä hidastaa brute force -hyökkäyksiä. Voitte myös määrittää sen ”vahvuuden”.

Salasanan koodaaminen BCryptillä

Katsotaan BCryptPasswordEncoder-komponenttia käytännössä. Luomme ilmentymän ja käytämme sen encode()-metodia.

Huomaatte, että tulos on joka kerta erilainen, vaikka syöte olisi sama. Tämä johtuu suolauksesta!

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordEncoderDemo {
  public static void main(String[] args) {
    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
    String rawPassword = "mysecretpassword";

    String encodedPassword1 = encoder.encode(rawPassword);
    String encodedPassword2 = encoder.encode(rawPassword);

    System.out.println("Encoded 1: " + encodedPassword1);
    System.out.println("Encoded 2: " + encodedPassword2);
  }
}

Salasanan tarkistaminen BCryptillä

Kun käyttäjä yrittää kirjautua sisään, hänen salasanaansa ei koodata uudelleen eikä merkkijonoja verrata suoraan. Sen sijaan käytetään matches()-metodia.

Tämä metodi ottaa käyttäjän syöttämän alkuperäisen salasanan ja tallennetun koodatun salasanan ja suorittaa tarvittavat tarkistukset turvallisesti.

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordVerifierDemo {
  public static void main(String[] args) {
    BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
    String rawPassword = "userpass";
    String storedEncodedPassword = encoder.encode(rawPassword);

    System.out.println("Stored Encoded: " + storedEncodedPassword);

    // Simulate login attempt with correct password
    boolean matchesCorrect = encoder.matches("userpass", storedEncodedPassword);
    System.out.println("Matches 'userpass': " + matchesCorrect);

    // Simulate login attempt with incorrect password
    boolean matchesIncorrect = encoder.matches("wrongpass", storedEncodedPassword);
    System.out.println("Matches 'wrongpass': " + matchesIncorrect);
  }
}

Muut turvalliset kooderit

Vaikka BCrypt on hyvin yleinen, Spring Security tukee myös muita vahvoja salasanojen tiivistysalgoritmeja. Näitä ovat:

  • Pbkdf2PasswordEncoder: käyttää PBKDF2:ta (Password-Based Key Derivation Function 2).
  • SCryptPasswordEncoder: perustuu scryptiin, joka on suunniteltu kestämään GPU-pohjaisia hyökkäyksiä.
  • Argon2PasswordEncoder: käyttää Argon2:ta, joka voitti Password Hashing Competition -kilpailun.

Kaikilla näillä on sama tarkoitus: salasanojen turvallinen tiivistäminen niiden helpon murtamisen estämiseksi.

DelegatingPasswordEncoder

Spring Security 5.0 esitteli DelegatingPasswordEncoder-komponentin oletuksena käytettäväksi kooderiksi. Tämä on erittäin tärkeä käsite!

Sen avulla voitte:

  • tukea samanaikaisesti useita koodausmuotoja (esimerkiksi siirtyessänne vanhemmasta algoritmista).
  • määrittää oletuskooderin ja pystyä silti tarkistamaan muilla algoritmeilla koodattuja salasanoja.

Se lisää koodatun salasanan eteen tunnisteen (esimerkiksi {bcrypt}), joka ilmaisee käytetyn algoritmin.

Pikatarkistus: salasanojen turvallisuus

Olette oppineet salasanojen koodaamisen tärkeyden. Testataan ymmärrystänne!

Kertaus: salasanojen turvallinen tallennus

Tässä oppitunnissa tarkastelimme salasanakooderien keskeistä roolia Spring Securityssä:

  • Salasanat on aina tiivistettävä, ei salattava, jotta ne voidaan tallentaa turvallisesti.
  • PasswordEncoder-rajapinta määrittelee, miten salasanat koodataan ja tarkistetaan.
  • BCryptPasswordEncoder on vahva ja suositeltu kooderi, joka käyttää suolausta ja mukautuvaa tiivistystä.
  • DelegatingPasswordEncoder mahdollistaa useiden tiivistysalgoritmien joustavan tukemisen.

Salasanojen asianmukainen koodaaminen on keskeinen osa käyttäjätilien suojaamista kaikissa sovelluksissa.

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 ”Salasanakooderien ymmärtäminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Spring Security 6 ja JWT-todennus-oppimispolun 3 oppituntia, myös oppitunnin “Salasanakooderien ymmärtäminen”. 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 ”Salasanakooderien ymmärtäminen”?

Tutustukaa Spring Securityn eri salasanakoodereihin ja niiden merkitykseen salasanojen turvallisessa tallennuksessa. 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 2/4.

Kuinka kauan ”Salasanakooderien ymmärtäminen”-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. Mukautetun `UserDetailsService`-toteutuksen luominen
  2. Salasanakooderien ymmärtäminen
  3. Tietokantapohjaisen käyttäjähallinnan integrointi
  4. Roolipohjainen valtuutus myönnetyillä oikeuksilla
← Takaisin: Spring Security 6 ja JWT-todennus