์๋ฒ์ HTTPS์ค์ ์ ์๋ฒ์์ ๋ฐ์ดํฐ ์ ์ก ๊ณผ์ ์ ๋๊ตฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก์ฑ ๋ณผ ์ ์๋๋ก ๋ณดํธํ๋ ์๋จ์ด๋ค.
ํ์ง๋ง ์ด๊ฒ์ ์๋ฒ์ ํต์ ์ด ์์ ํ ๊ฒ์ด์ง, ์๋ฒ๊ฐ ์์ ํ๋ค๋๊ฒ ์๋๋ค.
๋ง์ฝ Client์์ ๋น๋ฐ๋ฒํธ์๊ฐ์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์๋ฒ์์ ์ ์กํ๋๋ฐ, ์ด๋ฌํ ๊ฐ์ธ์ ๋ณด๋ฅผ DB์ ์ ์ฅํด๋์๋ค๋ฉด,
๊ทธ DB๊ฐ ๋ ธ์ถ๋๋ค๋ฉด ๊ฐ์ธ์ ๋ณด๊ฐ ๋ ธ์ถ๋๋ ๊ฒ์ด๋ค... ๐ฌ
๊ทธ๋์ JWT(JSON Web Token)์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํ ํ ๊ฒ์ด๋ค.
JWT๋ Base64 URL ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ์ฌ ํ ํฐ์ ๋ด์์ ์ํธํํ๊ณ ์๋ช ํ์ฌ ์ธ์ฆ ๋ฐ ๊ถํ๋ถ์ฌ๋ฅผ ํด์ค๋ค.
JWT๋ ์๋ช ์ ํตํด ์๋ฒ์์ ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ณ์กฐ๊ฐ ๋์๋์ง ํ์ธํ ์ ์์ผ๋ฉฐ, ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ์ฌ ํ ํฐ์ ์ ์ฉ์ ๋ง์ ์ ์๋ค.
๋ณดํต AccessToken๊ณผ RefreshToken์ผ๋ก ๋๋๋๋ฐ, ์์ธํ ๋ด์ฉ์ ๋ค์์ ํฌ์คํ ํ๊ฒ ๋ค.
ํ ํฐ ์์ฑ
public class JwtUtil {
Long exp = 3600000L; // 1์๊ฐ(3600000๋ฐ๋ฆฌ์ด)
private static final String SECRET_KEY = "SecretKey"; // JWT๋ฅผ ์ํธํํ๊ธฐ ์ํ Secret Key
public static String generateToken(String subject, long ttlMillis) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
// JWT ํ ํฐ ์์ฑ
String token = Jwts.builder()
.setSubject(subject) //subject ์ค์
.setIssuedAt(now) //ํ ํฐ์ด ๋ฐ๊ธ๋ ์๊ฐ
.setExpiration(new Date(nowMillis + exp)) //์ ํจ๊ธฐ๊ฐ ์ค์
.signWith(SignatureAlgorithm.HS256, SECRET_KEY) //์๋ช
.compact(); //ํฉ์น๊ธฐ
return token;
}
exp๋ ํ ํฐ์ ๋ง๋ฃ์๊ฐ์ด๋ค. accessToken, refreshToken ๋ฑ ์ฉ๋์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ค์ ํด์ผ ํ๋ค.
๋ง๋ฃ์๊ฐ์ด ๊ธธ์๋ก ํ์ทจ๋นํ ํ๋ฅ ์ด ๋์์ง๋ค.
๋ฐ๋ผ์ ์งง์ ์ธ์ฆ์ ์๊ตฌํ ๋์๋ ์งง์ ๋ง๋ฃ์๊ฐ์ ๋๋๊ฒ ์ข๋ค.
ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฆ
public static boolean validateToken(String token) {
try {
// JWT ํ ํฐ ํ์ฑ
Claims claims = Jwts.parserBuilder()
.setSigningKey(KEY)
.build()
.parseClaimsJws(token)
.getBody();
return true;
} catch (Exception ex) {
return false;
}
}
ํ ํฐ์ด ์ ํจํ์ง ๊ฒ์ฌํ๋ ๋ก์ง์ด๋ค. ์ค์ ํด๋ KEY๋ฅผ ํตํด ํ ํฐ์ ํ์ฑํ๊ณ ์ ํจํ ํ ํฐ์ด๋ฉด true, ์ ํจํ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
ํ ํฐ Body๊ฐ ์ป๊ธฐ
public static Claims getJwtBody(String token) {
// JWT ํ ํฐ ํ์ฑ
Claims claims = Jwts.parserBuilder()
.setSigningKey(KEY)
.build()
.parseClaimsJws(token)
.getBody();
return claims;
}
ํ ํฐ ๋ด์ Body๊ฐ์ ๊ฐ์ ธ์ค๋ ค๋ฉด, SignKey๋ฅผ ํตํด ํ์ฑํ๊ณ getBody()๋ฅผ ์ฌ์ฉํ๋ค.
'BackEnd > Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ๋ถ์ฐ ์์คํ ์์ ํจ๊ณผ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ๋ฒ (1) - RDB (1) | 2023.11.04 |
---|---|
[Spring] Docker์์ Static File ์ฒ๋ฆฌํ๊ธฐ (0) | 2023.09.02 |
[Spring] MongoDB ์ ์ฉ, ํ ์คํธ (0) | 2023.09.02 |
Spring ํ๊ฒฝ์์ Redis ์ฌ์ฉํ๊ธฐ (0) | 2023.09.01 |
[Spring] ์ ํ ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (0) | 2023.09.01 |