๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

jwt3

[Spring] ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ๊ณผ ๋‹ค๋ฅธ JWT์˜ ๋™์ž‘ ์›๋ฆฌ ๐Ÿ“Œ JWT(Json Web Token) ํŠน์ง•๊ณผ ์ฃผ์˜ ์‚ฌํ•ญJWT(Json Web Token)๋Š” JSON ํ˜•์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํด๋ ˆ์ž„ ๊ธฐ๋ฐ˜ ํ† ํฐ์ด๋‹ค.์ฃผ๋กœ ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization) ๊ณผ์ •์—์„œ ํ™œ์šฉ๋˜๋ฉฐ, ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š” Stateless ์ธ์ฆ ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค.๊ตฌ์กฐ๋Š” Header, Payload, Signature ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, ์„œ๋ช…(Signature)์„ ํ†ตํ•ด ๋ณ€์กฐ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค. โœ… ์ฃผ์š” ๊ฐœ๋… ์ •๋ฆฌ๊ตฌ๋ถ„์„ค๋ช…Headerํ† ํฐ์˜ ํƒ€์ž…(JWT)๊ณผ ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜(HS256, RS256 ๋“ฑ)์„ ๋ช…์‹œPayload์‚ฌ์šฉ์ž ์ •๋ณด, ๊ถŒํ•œ, ๋งŒ๋ฃŒ ์‹œ๊ฐ„(exp) ๋“ฑ ํด๋ ˆ์ž„(Claims) ํฌํ•จSignatureHeader + Payload๋ฅผ .. 2025. 9. 22.
[Spring] Access Token vs Refresh Token ์™„๋ฒฝ ์ •๋ฆฌ + Redis ์ €์žฅ ์ด์œ ๊นŒ์ง€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ JWT ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”์„ฑ์„ ๋А๋ผ๊ณ  ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ๋‹ด์•˜๋‹ค.๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ด๋Ÿฐ ์งˆ๋ฌธ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ธด๋‹ค."Access Token์ด๋ž‘ Refresh Token, ์ด ๋‘˜์€ ๋„๋Œ€์ฒด ๋ญ๊ฐ€ ๋‹ค๋ฅด๊ณ , ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ?"ํŠนํžˆ Refresh Token์„ ์–ด๋””์— ์ €์žฅํ•ด์•ผ ํ• ์ง€, Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ญ”์ง€ ๊ถ๊ธˆ์ฆ์ด ๋งŽ์•˜๋‹ค.๊ทธ๋ž˜์„œ Access Token๊ณผ Refresh Token ๊ฐœ๋…๋ถ€ํ„ฐ Refresh Token์„ ์„œ๋ฒ„, ํŠนํžˆ Redis์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๐Ÿ”‘ Access Token์ด๋ž€?!๋กœ๊ทธ์ธํ•˜๋ฉด ๋ฐœ๊ธ‰๋ฐ›๋Š” ์งง์€ ์ˆ˜๋ช…์˜ ํ† ํฐ์ด๋‹ค. (ex. 30๋ถ„)์‚ฌ์šฉ์ž๋Š” ๋งค ์š”์ฒญ๋งˆ๋‹ค Access Token์„ HTTP ํ—ค๋”์— ๋‹ด.. 2025. 5. 14.
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Spring Boot JWT ์ธ์ฆ ํ๋ฆ„ ๋งŒ๋“ค๊ณ  200 OK๋งŒ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๐Ÿ”ฅ JWT ์ธ์ฆ ๊ตฌํ˜„ & ํ•„ํ„ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ํ”„๋กœ์ ํŠธ์—์„œ JWT ์ธ์ฆ์„ ์ฒ˜์Œ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ดค๋‹ค.ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ๊นŒ์ง€๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ์ง€๋งŒ.. ๋ฌธ์ œ๋Š” ๊ทธ ์ดํ›„์˜€๋‹ค.Controller๋กœ ์š”์ฒญ์ด ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ , 200 OK๋งŒ ๋‚˜์˜ค๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.๋ฌธ์ œ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด์„œ ํ•œ์ฐธ์„ ํ—ค๋งค๋‹ค๊ฐ€, ๊ฒฐ๊ตญ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค. โœ๏ธ JwtUtil ํด๋ž˜์ŠคJWT๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ , ๊ฒ€์ฆํ•˜๊ณ , Claim ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.@Slf4j(topic = "JwtUtil")@Component@RequiredArgsConstructorpublic class JwtUtil { private static final String BEARER_PREFIX = "Bearer "; privat.. 2025. 5. 13.