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

[Spring Security] JWT๋ž€?JWT ๊ตฌ์กฐ, ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰ ๊ณผ์ •

by ์šฐ์ฃผ๋ฌผ๊ณ ๊ธฐ 2025. 5. 4.
๋ฐ˜์‘ํ˜•
JWT๋ž€?

 

JWT = Json Web Token

ํ† ํฐ ํ˜•์‹ ์ค‘์— ํ•˜๋‚˜์ž„!

โ€‹

json ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ํ† ํฐ ํฌ๋งท

โ€‹

๊ตฌ์„ฑ(๋‹ด๊ณ ์žˆ๋Š” ์ •๋ณด)์€

header + payload + signature

โ€‹

โ€‹

์™œ JWT ํ˜•์‹์„ ๋งŽ์ด ์“ธ๊นŒ?

- ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†๊ณ 

- ํ† ํฐ ์•ˆ์— ํ•„์š”ํ•œ ์ •๋ณด ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ 

- ๊ตฌ์กฐ ๋‹จ์ˆœํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์–ธ์–ด/ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

 


 

๋ฐœ๊ธ‰๋ฐ›์€ JWT๋ฅผ ์จ์„œ ์ธ์ฆ ํ•˜๋ ค๋ฉด,

HTTP ์š”์ฒญ ํ—ค๋” ์ค‘ Authorization ํ‚ค ๊ฐ’์—

Bearer + JWT ํ† ํฐ๊ฐ’ ๋„ฃ์–ด์„œ ๋ณด๋‚ด์•ผ๋จ.

โ€‹

 

Authorization : Bearer ey~~~~

 


JWT ๊ตฌ์กฐ๋Š”?

 

.์„ ๊ธฐ์ค€์œผ๋กœ

ํ—ค๋” (header), ๋‚ด์šฉ(payload), ์„œ๋ช…(signature)๋กœ ๊ตฌ์„ฑ

 

aaaaa.bbbbbb.ccccc   // (a=ํ—ค๋”, b=๋‚ด์šฉ, c=์„œ๋ช…)

 

 

 


1. ํ—ค๋” (header)

 

๋จผ์ € ํ—ค๋”์—๋Š”

ํ† ํฐ์˜ ํƒ€์ž… + ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ง€์ •ํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋‹ด๊น€

 

 

 

 

2. ๋‚ด์šฉ(payload)

 

๋‚ด์šฉ์—๋Š”

ํ† ํฐ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๊ฐ€ ๋‹ด๊น€

๋‚ด์šฉ์˜ ํ•œ ๋ฉ์–ด๋ฆฌ = ํด๋ ˆ์ž„(claim)

โ€‹

ํด๋ ˆ์ž„์€ ํ‚ค-๊ฐ’ ํ•œ์Œ์œผ๋กœ ๋˜์–ด์žˆ์Œ

โ€‹

์ข…๋ฅ˜๋Š”

- ๋“ฑ๋ก๋œ ํด๋ ˆ์ž„

- ๊ณต๊ฐœ ํด๋ ˆ์ž„

- ๋น„๊ณต๊ฐœ ํด๋ ˆ์ž„

โ€‹

โ€‹

โœ…๋“ฑ๋ก๋œ ํด๋ ˆ์ž„โœ…

ํ† ํฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋ฐ ์‚ฌ์šฉํ•จ

(๋ฐœ๊ธ‰์ž, ์ œ๋ชฉ, ๋Œ€์ƒ์ž, ๋งŒ๋ฃŒ์‹œ๊ฐ„, ํ™œ์„ฑ ๋‚ ์งœ, ๋ฐœ๊ธ‰์‹œ๊ฐ„, JWT ๊ณ ์œ  ์‹๋ณ„์ž..)

โ€‹

โœ…๊ณต๊ฐœ ํด๋ ˆ์ž„โœ…

๊ณต๊ฐœ๋˜์–ด๋„ ์ƒ๊ด€์—†๋Š” ํด๋ ˆ์ž„

์ถฉ๋Œ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„ ๊ฐ€์ ธ์•ผํ•จ (unique)

๋ณดํ†ต ์ด๋ฆ„ URI๋กœ ์ง€์Œ

โ€‹

โœ…๋น„๊ณต๊ฐœ ํด๋ ˆ์ž„โœ…

๊ณต๊ฐœ๋˜๋ฉด ์•ˆ๋˜๋Š” ํด๋ ˆ์ž„

ํด๋ผ์ด์–ธํŠธ โฌ…๏ธโžก๏ธ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋จ

 

 

 

3. ์„œ๋ช…(signature)

ํ•ด๋‹น ํ† ํฐ์ด ์กฐ์ž‘๋˜์—ˆ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Œ์„ ํ™•์ธํ•˜๋Š” ์šฉ๋„

ํ—ค๋”์˜ ์ธ์ฝ”๋”ฉ๊ฐ’, ๋‚ด์šฉ์˜ ์ธ์ฝ”๋”ฉ๊ฐ’ ํ•ฉ์นœ ๋‹ค์Œ์—

์ฃผ์–ด์ง„ ๋น„๋ฐ€์ปค ์จ์„œ ํ•ด์‹œ๊ฐ’ ์ƒ์„ฑํ•จ

 

 


ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„

 

ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ํ†ต์‹ ์‹œ ์ธ์ฆ์ด ํ•„์š”ํ•œ API๋ผ๋ฉด

ํ† ํฐ์„ ํ†ตํ•ด์„œ ์ธ์ฆ ํ•œ๋‹ค๊ณ  ํ–ˆ์Œ.

โ€‹

๊ทผ๋ฐ ๋งŒ์•ฝ์—, ํ† ํฐ ์ฃผ๊ณ ๋ฐ›๋Š” ํ™˜๊ฒฝ์ด ์ทจ์•ฝํ•ด์„œ

ํ† ํฐ ์ž์ฒด๊ฐ€ ๋…ธ์ถœ๋˜๋ฉด?

โ€‹

์„œ๋ฒ„๋Š” ํ† ํฐ๊ณผ ํ•จ๊ป˜ ์˜จ ์š”์ฒญ์ด,

ํ† ํฐ ํƒˆ์ทจํ•œ ๋‚˜์œ ์‚ฌ๋žŒ์ด ๋ณด๋‚ธ ์š”์ฒญ์ธ์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์Œ

โ€‹

--> ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์ด ์žˆ๋‹ค๋ฉด?

โ€‹

 

 

 

๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ

 

ํ† ํฐ ์œ ํšจ๊ธฐ๊ฐ„์ด ํ•˜๋ฃจ๋ผ๊ณ  ํ•ด๋ณด์ž.

๊ทธ๋Ÿผ ํ•˜๋ฃจ์ข…์ผ ํ•ด๋‹น ํ† ํฐ์œผ๋กœ ๋ญ๋“  ํ•  ์ˆ˜ ์žˆ์Œ. ์œ„ํ—˜!

--> ๊ทธ๋Ÿผ ํ† ํฐ ์œ ํšจ์‹œ๊ฐ„์ด ์งง์œผ๋ฉด ๋˜๊ฒ ๋„ค?

---> ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ๋ถˆํŽธํ•จ.

โ€‹

----> ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์ด๋ผ๋Š”๊ฒŒ ์žˆ์œผ๋ฉด ๋˜๊ฒ ๊ตฐ!

โ€‹

โ€‹

๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์€, ์•ก์„ธ์Šค ํ† ํฐ์ด๋ž‘์€ ๋ณ„๊ฐœ์ž„.

์ธ์ฆ์„ ์œ„ํ•œ ์šฉ๋„๊ฐ€ ์•„๋‹ˆ๋ผ, ์•ก์„ธ์Šค ํ† ํฐ์ด ๋งŒ๋ฃŒ๋์„ ๋•Œ

new ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์“ฐ๋Š”๊ฑฐ์ž„.

โ€‹

์—‘์„ธ์Šค ํ† ํฐ ์ž์ฒด์˜ ์œ ํšจ๊ธฐ๊ฐ„์€ ์งง๊ฒŒํ•˜๊ณ 

๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์œ ํšจ๊ธฐ๊ฐ„ ๊ธธ๊ฒŒํ•˜๋ฉด

๊ณต๊ฒฉ์ž๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ ํƒˆ์ทจํ•ด๋„

๋ช‡๋ถ„๋’ค๋ฉด ๋ชป์“ฐ๋‹ˆ๊นŒ ์•ˆ์ „.

 

 

 

 

[๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰ ๊ณผ์ •]

โ€‹

1. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ : ์ธ์ฆ ์š”์ฒญ

2. ์„œ๋ฒ„ -> ํด๋ผ์ด์–ธํŠธ : ์•ก์„ธ์Šค ํ† ํฐ & ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‘๋‹ต

3. ์„œ๋ฒ„ -> DB : ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์€ ์ €์žฅ

4. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ :API ์š”์ฒญ

5. ์„œ๋ฒ„ : ํ† ํฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•˜๊ณ  ์‘๋‹ต

~~ ์‹œ๊ฐ„์ด ํ๋ฅด๊ณ  ~~

6. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ : (๋งŒ๋ฃŒ๋œ ํ† ํฐ์œผ๋กœ) API ์š”์ฒญ

7. ์„œ๋ฒ„ -> ํด๋ผ์ด์–ธํŠธ : ํ† ํฐ ๋งŒ๋ฃŒ๋๋‹ค๊ณ  ์‘๋‹ต

8. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ : (๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ๊ณผ ํ•จ๊ผ) ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰ ์š”์ฒญ

9. ์„œ๋ฒ„ -> DB : ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์กฐํšŒ & ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

10. ์„œ๋ฒ„ -> ํด๋ผ : ๋งŒ์กฑํ•˜๋ฉด, new ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ์‘๋‹ต

11. ํด๋ผ -> ์„œ๋ฒ„ : new ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ๋‹ค์‹œ ์š”์ฒญ...(4๋ฒˆ๋ถ€ํ„ฐ ๋ฐ˜๋ณต)

๋ฐ˜์‘ํ˜•