Session
โข
์ฅ์
โฆ
JSESSIONID๋ ์ ์๋ฏธํ ๊ฐ์ด ์๋๋ผ ์๋ฒ์์ ์ธ์
์ ๋ณด๋ฅผ ์ฐพ๋ KEY๋ก๋ง ํ์ฉ
โฆ
ํ์ทจ๋์๋ค๊ณ ํด์ ๊ฐ์ธ์ ๋ณด๊ฐ ํ์ทจ๋๊ฑด ์๋
โข
๋จ์
โฆ
์๋ฒ์ ์ธ์
์ ๋ณด๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ํ์
โฆ
์๋น์ค๋ฅผ ์ด์ฉํ๋ ์ฌ์ฉ์๊ฐ ๋ง๋ค๋ฉด ์ ์ฅํ ๊ณต๊ฐ๋ ๋ ๋ง์ด ํ์
โฆ
๋ถ์ฐ ์๋ฒ์์๋ ์ธ์
์ ๊ณต์ ํ๋๋ฐ ์ด๋ ค์์ด ์์
Token
โข
์ธ์
์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ ํฐ์ผ๋ก ์ธ์ฆํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ
โข
์ ์ ๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ์๋ฒ์์๋ ํ ํฐ์ ์์ฑํ ๋ค์ ์ ์ฅํ์ง ์๊ณ (stateless) ํ ํฐ ๊ฐ์ ๋ด๋ ค์ค๋๋ค
โข
์ด ํ ํฐ ๊ฐ์ ์ ์ ๊ฐ ๊ฒ์๊ธ ์กฐํ ์์ฒญ์ ํ ๋ ํจ๊ป ๋ณด๋ด๊ณ ์๋ฒ2(์๋ฒ1์ด์ฌ๋ ์๊ด์์)์์ ์ด ํ ๊ทผ์ ์๋ฏธ์๋ ๊ฐ์ผ๋ก ํด์, ๊ทธ๋ฆฌ๊ณ ๊ทธ ใฑ๋ฐง์ ํ ๋๋ก ์ ์ ๋ฅผ ์ธ์ฆ
โข
์ฅ์
โฆ
์ธ์
๊ด๋ฆฌ๋ฅผ ํ ํ์๊ฐ ์์ด ๋ณ๋์ ์ ์ฅ์๊ฐ ํ์ํ์ง ์์
โฆ
๋ก๊ทธ์ธ์ ์ ๊ณตํ ์๋ฒ ๋ง๊ณ ๋ ์๋ฒ ๋ถ์ฐ &ํด๋ฌ์คํฐ ํ๊ฒฝ๊ณผ ๊ฐ์ ํ์ฅ์ฑ์ ์ข์
โข
๋จ์
โฆ
ํ๋ฒ ์ ๊ณต๋ ํ ํฐ์ ํ์๊ฐ ์ด๋ ค์
โช
์ธ์
์ ๊ฒฝ์ฐ์๋ ์๋ฒ์์ ์ธ์
์ ์ญ์ ํด๋ฒ๋ฆฌ๋ฉด ๋ธ๋ผ์ฐ์ ์ JSESSIONID๋ ๋ฌด์ฉ์ง๋ฌผ์ด ๋์ด๋ฒ๋ฆผ
โช
๊ทธ๋ฌ๋ ํ ํฐ์ ์ธ์
์ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ฒ ์ ๊ณต๋ ํ ํฐ์ ํ์ํ ์ ์์
โช
๊ทธ๋์ ๋ณดํต ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ ์งง๊ฒ ํจ(๊ฐ๋ฐํ๊ฒฝ์์๋ ๊ธธ๊ฒ ํจ why? โ ์งง๊ฒ ํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ํ ํฐ์ ์์ฃผ ๋ฐ๊ธ ๋ฐ์์ผ๋จ)
โฆ
ํ ํฐ์๋ ์ ์ ์ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์์ ์ฑ์ด ์ฐ๋ ค๋จ
โช
๋ฏผ๊ฐ์ ๋ณด๋ฅผ ํ ํฐ์ ํฌํจ์ํค๋ฉด ์๋จ(ex ํจ์ค์๋, ๊ฐ์ธ์ ๋ณด)
JWT์ ๊ตฌ์กฐ
ํ ํฐ ๋ฐฉ์์์ ๊ฐ์ฅ ์ ์๋ ค์ง JWT๊ฐ ์์, Json Web Token์ ์ค์๋ง
HEADER.PAYLOAD.SIGNATURE
1.
HEADER
Header๋ JWT๋ฅผ ๊ฒ์ฆํ๋๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง ๊ฐ์ฒด
Signature์ ์ฌ์ฉํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌด์์ธ์ง, ํ ํฐ ํ์
, key์ ID๊ฐ ๋ฌด์์ธ์ง ์ ๋ณด๋ฅผ ๋ด๊ณ ์์
์ด ์ ๋ณด๋ฅผ Json์ผ๋ก ๋ณํํด์ UTF-8๋ก ์ธ์ฝ๋ฉํ ๋ค Base64 URL-Sage๋ก ์ธ์ฝ๋ฉํ ๊ฐ์ด ๋ค์ด๊ฐ ์์
๊ฒฐ๊ณผ ๊ฐ์ด ๋ํดํ ๋ฌธ์๋ก ๋ณด์ด์ง๋ง ์ํธํ๋ ๊ฐ์ ์๋.
2.
PAYLOAD
์ค์ง์ ์ผ๋ก ์ธ์ฆ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
๋ฐ์ดํฐ์ ๊ฐ๊ฐ ํ๋๋ค์ Claim์ด๋ผ๊ณ ํจ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ Claim์ username์ ํฌํจํจ
์ธ์ฆํ ๋ payload์ ์๋ username์ ๊ฐ์ ธ์์ ์ ์ ์ ๋ณด๋ฅผ ์กฐํํ ๋ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ
๋ํ ํ ํฐ ๋ฐํ์๊ฐ(iat)์ ๋ง๋ฃ์๊ฐ(exp)๋ฅผ ํฌํจํจ
๊ทธ ์ธ์๋ ์ํ๋ Claim์ ์ผ๋ง๋ ์ง ์ถ๊ฐ ํ ์ ์์ง๋ง ๋ฏผ๊ฐ์ ๋ณด๋ ํฌํจ์์ผ์๋ ์๋จ
Payload ์ญ์ Header์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ํธํ๋์ง ์์
Json์ผ๋ก ๋ฐ๊พผ๋ค UTF-8๋ก ์ธ์ฝ๋ฉํ๊ณ Base64๋ก ๋ณ๊ฒฝํ ๋ฐ์ดํฐ์ผ ๋ฟ
3.
SIGNATURE
์์ Header์ Payload๋ ์ํธํํ์ง ์๊ณ ๋ณํํ ๋ฐ์ดํฐ
์ด๋ ๊ฒ Header์ Payload ์์ฑ ๋ฉ์ปค๋์ฆ์ ๋๋ฌด ์ฝ๊ณ ๋๊ตฌ๋ ๋ง๋ค ์ ์๋ ๋ฐ์ดํฐ
๋ฐ๋ผ์ ์ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ง ์๋ค๋ฉด ํ ํฐ์ ๋ํ ์ง์ ์ฌ๋ถ ํ๋จ์ ์ ํ ์ด๋ฃจ์ด์ง ์ ์์
๊ทธ๋์ JWT์ ๊ตฌ์กฐ์์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์๋ Signature๋ ํ ํฐ ์์ฒด์ ์ง์์ฌ๋ถ๋ฅผ ํ๋จํ๋ ์ฉ๋๋ก ์ฌ์ฉํจ.
Signature๋ Header์ Payload๋ฅผ ํฉ์น๋ค ๋น๋ฐํค๋ก Hash๋ฅผ ์์ฑํ์ฌ ์ํธํํจ
โ ํค๋.ํ์ด๋ก๋ ๊ฐ์ SecretKey๋ก Hashingํ๊ณ Base64๋ก ๋ณ๊ฒฝํจ
Key Rolling
JWT์ ํ ํฐ ์์ฑ ๋ฉ์ปค๋์ฆ์ ๋ณด๋ค๋ณด๋ฉด Secret Key๊ฐ ๋
ธ์ถ๋๋ฉด ์ฌ์ค์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ Secret Key๋ฅผ ์ฌ๋ฌ๊ฐ ๋๊ณ Key ๋
ธ์ถ์ ๋๋นํ ์ ์์
Secret Key๋ฅผ ์ฌ๋ฌ๊ฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ก ์ถ๊ฐํ๊ณ ์ญ์ ํด์ค์ ๋ณ๊ฒฝํ๋ค๋ฉด
Secret Key ์ค์ 1๊ฐ๊ฐ ๋
ธ์ถ๋์ด๋ ๋ค๋ฅธ Secret Key์ ๋ฐ์ดํฐ๋ ์์ ํ ์ํ๊ฐ ๋จ
์ด๊ฑธ ๋ฐ๋ก Key Rolling์ด๋ผ๊ณ ํจ(Key Rolling์ด ํ์๋ ์๋)
Key Rolling์์๋ ์ฌ๋ฌ๊ฐ์ Secret Key๊ฐ ์กด์ฌ ํจ
Secret Key 1๊ฐ์ Uniqueํ ID๋ฅผ ์ฐ๊ฒฐ์์ผ ๋๋ฉด JWT ํ ํฐ์ ๋ง๋ค ๋ ํค๋์ kid๋ฅผ ํฌํจํ์ฌ ์ ๊ณตํ๊ณ ์๋ฒ์์ ํ ํฐ์ ํด์คํ ๋ kid๋ก Secret Key๋ฅผ ์ฐพ์์ Signature๋ฅผ ๊ฒ์ฆํจ
JWT Util ๋ง๋ค๊ธฐ
1.
์์กด์ฑ ์ถ๊ฐ
2.
JwtKey: JWT Secret Key๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๊ณตํฉ๋๋ค, Key Rolling์ ์ง์ํจ
3.
JwtUtils: JWT ํ ํฐ์ ์์ฑํ๊ฑฐ๋ Parsingํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํจ
4.
SigningKeyResolver: JWT์ ํค๋์์ kid๋ฅผ ์ฐพ์์ Key(SecretKey + ์๊ณ ๋ฆฌ์ฆ)๋ฅผ ์ฐพ์์ด