JWT-tunnisteiden allekirjoittaminen ja vahvistaminen
Oppikaa JWT-allekirjoituksen taustalla olevat kryptografiset periaatteet sekä tunnisteen eheyden ja aitouden vahvistaminen.
JWT-tunnisteiden allekirjoittaminen ja vahvistaminen 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.
Mitä JWT:n allekirjoittaminen tarkoittaa?
JSON Web Tokenit (JWT:t) ovat tehokkaita, mutta miten voimme luottaa niihin? Allekirjoittaminen on vastaus! Se on kryptografinen prosessi, joka varmistaa, ettei tunnistetta ole muutettu ja että se on peräisin luotetusta lähteestä.
- Eheys: Vahvistaa, ettei tunnisteen sisältöä ole muutettu sen myöntämisen jälkeen.
- Aitous: Varmistaa, että tunnisteen myönsi odotettu lähettäjä.
Ilman allekirjoitusta kuka tahansa voisi luoda tai muuttaa JWT:n!
Tietoturvan avaimet: salaisuus
Symmetrisissä allekirjoitusalgoritmeissa, kuten HMAC-algoritmissa (esimerkiksi HS256), käytetään yhtä salaisen avaimenä. Avaimen tuntevat vain myöntäjä ja tarkoitetut vahvistajat.
- Salainen avain on tavuista koostuva merkkijono, jota tarvitaan sekä allekirjoittamiseen että vahvistamiseen.
- Se on pidettävä erittäin luottamuksellisena.
- Jos salainen avain vaarantuu, JWT:t eivät enää ole turvallisia!
Algoritmit: HS256 ja RS256
JWT:t käyttävät allekirjoituksen luomiseen kryptografisia algoritmeja. Algoritmin tyyppi määritetään tunnisteen otsakkeessa.
- HS256 (HMAC SHA-256): Symmetrinen algoritmi. Käyttää samaa salaista avainta sekä allekirjoittamiseen että vahvistamiseen. Helpompi toteuttaa.
- RS256 (RSA SHA-256): Epäsymmetrinen algoritmi. Käyttää yksityistä avainta allekirjoittamiseen ja julkista avainta vahvistamiseen. Monimutkaisempi, mutta sopii paremmin hajautettuihin järjestelmiin.
Keskitymme esimerkeissä HS256-algoritmiin sen yksinkertaisuuden vuoksi.
Allekirjoituksen luominen (HS256)
Allekirjoitus luodaan yhdistämällä Base64Url-koodattu otsake, Base64Url-koodattu hyötykuorma ja salainen avain valitulla algoritmilla.
- Ota Base64Url-koodattu otsake.
- Ota Base64Url-koodattu hyötykuorma.
- Yhdistä ne pisteellä:
encodedHeader + "." + encodedPayload. - Laske yhdistetyn merkkijonon tiiviste HMAC SHA-256 -algoritmilla ja salaisella avaimella.
- Koodaa syntyvä tiiviste Base64Url-muotoon saadaksesi lopullisen allekirjoituksen.
Tulos: encodedHeader.encodedPayload.signature
Koodi: HS256-allekirjoituksen luominen
Tässä on Java-esimerkki JWT:n HS256-allekirjoituksen luomiseen. Huomaatte, että salainen avain on olennainen osa tiivisteen laskemista.
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class JwtSigner {
public static void main(String[] args) throws Exception {
String encodedHeader = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"; // {"alg":"HS256","typ":"JWT"}
String encodedPayload = "eyJpZCI6MSwicm9sZSI6InVzZXIifQ"; // {"id":1,"role":"user"}
String secret = "coddykit-secret-lesson-key-1234567890";
String dataToSign = encodedHeader + "." + encodedPayload;
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256");
hmacSha256.init(secretKey);
byte[] signatureBytes = hmacSha256.doFinal(dataToSign.getBytes("UTF-8"));
String encodedSignature = Base64.getUrlEncoder().withoutPadding().encodeToString(signatureBytes);
System.out.println("Data to Sign: " + dataToSign);
System.out.println("Generated Signature: " + encodedSignature);
System.out.println("Full JWT: " + dataToSign + "." + encodedSignature);
}
}JWT:n allekirjoituksen vahvistaminen
Vahvistaminen on allekirjoittamisen käänteisprosessi. Kun vastaanotatte JWT:n, teidän on varmistettava, että sen allekirjoitus on kelvollinen.
- Erota vastaanotettu JWT kolmeksi osaksi: otsakkeeksi, hyötykuormaksi ja allekirjoitukseksi.
- Muodosta uudelleen ”allekirjoitettava data” -merkkijono:
encodedHeader + "." + encodedPayload. - Laske tästä datasta uusi allekirjoitus käyttämällä samaa salaista avainta ja algoritmia.
- Vertaa laskemaasi uutta allekirjoitusta JWT:ssä olevaan allekirjoitukseen.
Jos ne täsmäävät, tunniste on kelvollinen eikä sitä ole muutettu! Muussa tapauksessa se on virheellinen.
Avainten turvallinen hallinta
JWT-tunnisteiden turvallisuus riippuu ratkaisevasti siitä, kuinka hyvin hallitsette allekirjoitusavaimia. Vaarantunut avain mitätöi kaikki tietoturvatoimenne!
- Luottamuksellisuus: Pitäkää salaiset avaimet yksityisinä. Älkää koskaan kirjoittako niitä suoraan asiakaspuolen koodiin.
- Kierrätys: Vaihtakaa avaimet säännöllisesti mahdollisen tietomurron vaikutusten rajoittamiseksi.
- Vahvuus: Käyttäkää vahvoja, satunnaisia ja riittävän pitkiä avaimia.
- Tallentakaa avaimet turvallisiin ympäristöihin, kuten ympäristömuuttujiin tai erillisiin avaintenhallintapalveluihin.
Koodi: HS256-allekirjoituksen vahvistaminen
Tässä esimerkissä näytetään, miten JWT:n allekirjoitus vahvistetaan. Käytämme samaa salaista avainta allekirjoituksen laskemiseen uudelleen ja vertaamme sitä tunnisteessa olevaan allekirjoitukseen.
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class JwtVerifier {
public static void main(String[] args) throws Exception {
String jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6InVzZXIifQ.qS6pQ_6_q-P_5_o-O_6_n-N_7_m-M_8_l-L_9_k-K_0_j-J_1_i-I_2_h-H_3_g-G_4_f-F_5_e-E_6_d-D_7_c-C_8_b-B_9_a-A";
String secret = "coddykit-secret-lesson-key-1234567890";
String[] parts = jwt.split("\\.");
String encodedHeader = parts[0];
String encodedPayload = parts[1];
String receivedSignature = parts[2];
String dataToSign = encodedHeader + "." + encodedPayload;
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256");
hmacSha256.init(secretKey);
byte[] calculatedSignatureBytes = hmacSha256.doFinal(dataToSign.getBytes("UTF-8"));
String calculatedSignature = Base64.getUrlEncoder().withoutPadding().encodeToString(calculatedSignatureBytes);
if (calculatedSignature.equals(receivedSignature)) {
System.out.println("Signature is VALID!");
} else {
System.out.println("Signature is INVALID!");
System.out.println("Received: " + receivedSignature);
System.out.println("Calculated: " + calculatedSignature);
}
}
}Symmetrinen ja epäsymmetrinen allekirjoittaminen
HS256 (HMAC SHA-256) käyttää jaettua salaista avainta, kun taas RS256 (RSA SHA-256) ja ES256 (ECDSA SHA-256) käyttävät avainpareja.
- Symmetrinen (esim. HS256): Sama avain allekirjoittamiseen ja allekirjoituksen tarkistamiseen. Sopii parhaiten yhden palvelun sovelluksiin tai tilanteisiin, joissa tarkistaja on myös myöntäjä.
- Asymmetrinen (esim. RS256, ES256): Yksityinen avain allekirjoittamiseen ja julkinen avain tarkistamiseen. Ihanteellinen hajautettuihin järjestelmiin, joissa useiden palvelujen on voitava tarkistaa keskitetyn tahon myöntämät tokenit. Julkinen avain voidaan jakaa laajasti vaarantamatta tietoturvaa.
Pikatesti: JWT:n tietoturva
Olette oppineet JWT:n allekirjoittamisesta ja tarkistamisesta. Testataan seuraavaksi ymmärrystänne.
Kertaus: suojatut JWT:t
Hienoa työtä! Olemme selventäneet, miten JWT:t suojataan allekirjoittamisen ja tarkistamisen avulla.
- Allekirjoittaminen varmistaa JWT:n eheyden ja aitouden kryptografisen algoritmin ja salaisen avaimen avulla.
- HS256 (HMAC SHA-256) on symmetrinen algoritmi, joka käyttää yhtä jaettua salaista avainta.
- Tarkistaminen tarkoittaa allekirjoituksen laskemista uudelleen ja sen vertaamista vastaanotettuun allekirjoitukseen.
- Avainten turvallinen hallinta on ensiarvoisen tärkeää JWT:n tietoturvan kannalta.
- RS256:n kaltaiset asymmetriset algoritmit käyttävät avainpareja hajautettuun tarkistamiseen.
Seuraavaksi näemme, miten JWT:t integroidaan Spring Securityyn!
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 ”JWT-tunnisteiden allekirjoittaminen ja vahvistaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Spring Security 6 ja JWT-todennus-oppimispolun 3 oppituntia, myös oppitunnin “JWT-tunnisteiden allekirjoittaminen ja vahvistaminen”. 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 ”JWT-tunnisteiden allekirjoittaminen ja vahvistaminen”?
Oppikaa JWT-allekirjoituksen taustalla olevat kryptografiset periaatteet sekä tunnisteen eheyden ja aitouden vahvistaminen. 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 ”JWT-tunnisteiden allekirjoittaminen ja vahvistaminen”-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
- JSON Web Tokenien ymmärtäminen
- JWT:n rakenne ja claimit
- JWT-tunnisteiden allekirjoittaminen ja vahvistaminen
- JWT:n vanhenemis- ja vahvistussäännöt