Refresh Tokenien toteuttaminen
Kehitä strategia refresh tokenien myöntämiseen ja hallintaan, jotta käyttäjäistuntoja voidaan pidentää turvallisesti ilman toistuvaa uudelleentodennusta.
Refresh Tokenien toteuttaminen on ilmainen Spring Security 6 ja JWT-todennus-oppitunti CoddyKitissä. Tämä on oppitunti 1/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 access tokenien käyttöikä on lyhyt?
Modernissa tietoturvassa Access Token -tokeneista, kuten JWT:istä, tehdään yleensä lyhytikäisiä. Tämä tarkoittaa, että ne vanhenevat nopeasti, usein muutamassa minuutissa tai muutamassa tunnissa.
Miksi? Jos access token varastetaan, sen lyhyt käyttöikä rajoittaa aikaa, jonka hyökkääjä voi käyttää sitä käyttäjänä esiintymiseen. Tämä pienentää haavoittuvuuden aikaikkunaa.
Käyttäjäkokemuksen haaste
Vaikka lyhytikäiset access tokenit parantavat tietoturvaa, ne voivat heikentää käyttäjäkokemusta. Kuvitelkaa, että joutuisitte kirjautumaan sisään 15 minuutin välein, koska access token vanhentui!
Käyttäjät odottavat pysyvänsä kirjautuneina pitkiä aikoja ilman jatkuvaa uudelleenautentikointia. Tässä Refresh Token -tokenit tulevat avuksi.
Refresh Token -tokenien esittely
Refresh Token on erityinen, pitkäikäinen token, joka myönnetään lyhytikäisen access tokenin rinnalla käyttäjän ensimmäisen kirjautumisen yhteydessä.
- Sitä ei käytetä resurssien suoraan käyttämiseen.
- Sen ainoa tarkoitus on hankkia uusi kelvollinen access token, kun nykyinen vanhenee.
- Niiden voimassaoloaika on yleensä paljon pidempi: päiviä, viikkoja tai jopa kuukausia.
Refresh Token -tokenin kulku
Näin refresh tokenit ylläpitävät käyttäjän istuntoa turvallisesti:
- Kirjautuminen: Käyttäjä autentikoidaan, ja hän saa sekä Access Token- että Refresh Token -tokenin.
- Käyttö: Käyttäjä käyttää access tokenia API-pyyntöihin.
- Vanhentuminen: Kun access token vanhenee, API-pyynnöt epäonnistuvat.
- Päivittäminen: Asiakas lähettää refresh tokenin erityiseen endpointiin saadakseen uuden access tokenin.
- Jatkaminen: Jos refresh token on kelvollinen, myönnetään uusi access token ja käyttäjä voi jatkaa ilman uutta kirjautumista.
Refresh Token -tokenien luominen
Refresh tokenit ovat usein myös JWT:itä, mutta niiden claimit ja voimassaoloaika poikkeavat access tokeneista. Ne voivat sisältää claimin 'type': 'refresh', jonka avulla ne erotetaan access tokeneista.
Tässä on yksinkertaistettu esimerkki siitä, kuinka pitkän voimassaoloajan omaava JWT, joka toimii refresh tokenina, voidaan luoda:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class RefreshTokenGenerator {
private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
public static String generateRefreshToken(String username) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
// Refresh token valid for 7 days
long expiryMillis = nowMillis + TimeUnit.DAYS.toMillis(7);
Date expiry = new Date(expiryMillis);
return Jwts.builder()
.setSubject(username)
.claim("token_type", "refresh") // Custom claim
.setIssuedAt(now)
.setExpiration(expiry)
.signWith(SECRET_KEY)
.compact();
}
public static void main(String[] args) {
String user = "coddykit_user";
String refreshToken = generateRefreshToken(user);
System.out.println("Generated Refresh Token for " + user + ":");
System.out.println(refreshToken);
}
}Turvallinen tallennus asiakkaan puolella
Minne asiakkaan tulisi tallentaa refresh token? Tämä on tietoturvan kannalta ratkaisevaa:
- HTTP-only-evästeet: Web-sovelluksissa tämä on turvallisin vaihtoehto. Selain lähettää ne automaattisesti, eikä JavaScript pääse käsittelemään niitä, mikä estää XSS-hyökkäyksiä.
- Suojattu tallennus: Mobiilisovelluksissa tulee käyttää alustan omaa suojattua tallennusta, kuten iOS Keychainia tai Android Keystorea.
Älkää koskaan tallentako refresh tokeneita Local Storageen! Se on altis XSS-hyökkäyksille.
Palvelinpuolen hallinta
Turvallisuuden ja hallinnan parantamiseksi refresh tokeneita hallitaan usein myös palvelinpuolella:
- Tallennus tietokantaan: Tallentakaa refresh tokenit tai niiden tiivisteet tietokantaan ja yhdistäkää ne käyttäjään.
- Mitätöinti: Näin palvelin voi mitätöidä refresh tokenin välittömästi esimerkiksi käyttäjän kirjautuessa ulos, vaihtaessa salasanansa tai kun tokenin epäillään vaarantuneen.
- Yhden kerran käyttö: Joissakin toteutuksissa refresh tokenit ovat kertakäyttöisiä, jolloin jokaisen päivityspyynnön yhteydessä myönnetään uusi token.
Refresh-endpoint
Spring Boot -sovelluksesi tarvitsee erillisen API-endpointin, kuten /api/auth/refresh, jota asiakkaat voivat kutsua vaihtaakseen kelvollisen refresh tokenin uuteen access tokeniin.
Tämän endpointin tulee:
- vastaanottaa refresh token asiakkaalta.
- validoida refresh tokenin allekirjoitus, claimit ja voimassaoloaika.
- tarkistaa token palvelinpuolen tallennuksesta, jos sitä käytetään.
- luoda ja palauttaa kelvollisen tokenin tapauksessa uusi access token ja mahdollisesti myös uusi refresh token.
Refresh-endpointin logiikka (koodikatkelma)
Tässä on käsitteellinen esimerkki Spring controller -metodista, joka käsittelee päivityspyynnön. Huomaa, että `isRunnable` on false, koska tämä on osa suurempaa Spring-sovelluskontekstia.
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
private JwtService jwtService;
@Autowired
private RefreshTokenService refreshTokenService;
@PostMapping("/refresh")
public ResponseEntity<TokenResponse> refreshAccessToken(@RequestBody RefreshRequest refreshRequest) {
String oldRefreshToken = refreshRequest.getRefreshToken();
// 1. Validate the old refresh token
if (!jwtService.validateToken(oldRefreshToken) || !refreshTokenService.isValidRefreshToken(oldRefreshToken)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
String username = jwtService.extractUsername(oldRefreshToken);
// 2. Generate new access token
String newAccessToken = jwtService.generateAccessToken(username);
// 3. (Optional) Generate a new refresh token and invalidate the old one
String newRefreshToken = refreshTokenService.rotateRefreshToken(oldRefreshToken, username);
return ResponseEntity.ok(new TokenResponse(newAccessToken, newRefreshToken));
}
}Refresh Token -tokenin tarkistus
Mitkä seuraavista ovat turvallisia käytäntöjä refresh tokenien hallintaan?
Kertaus: turvalliset istunnot refresh tokenien avulla
Olette oppineet, kuinka Refresh Token -tokenit ovat olennaisia vahvan tietoturvan ja hyvän käyttäjäkokemuksen tasapainottamisessa sovelluksissa, joissa käytetään lyhytikäisiä access tokeneita.
- Niiden avulla käyttäjät voivat pysyä autentikoituina pidempiä aikoja.
- Turvallinen tallennus, kuten HTTP-only-evästeet ja mobiilialustojen suojattu tallennus, on elintärkeää.
- Palvelinpuolen hallinta mahdollistaa mitätöinnin ja tokenien kierrättämisen paremman tietoturvan saavuttamiseksi.
Tämä mekanismi on vankkojen ja nykyaikaisten autentikointijärjestelmien perusta.
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 ”Refresh Tokenien toteuttaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Spring Security 6 ja JWT-todennus-oppimispolun 3 oppituntia, myös oppitunnin “Refresh Tokenien toteuttaminen”. 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 ”Refresh Tokenien toteuttaminen”?
Kehitä strategia refresh tokenien myöntämiseen ja hallintaan, jotta käyttäjäistuntoja voidaan pidentää turvallisesti ilman toistuvaa uudelleentodennusta. 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 1/4.
Kuinka kauan ”Refresh Tokenien toteuttaminen”-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
- Refresh Tokenien toteuttaminen
- JWT Tokenien mitätöintistrategiat
- Tokenien turvallinen tallennus
- Allekirjoitusavainten kierrättäminen ja avainten hallinta