์ฟ ํค์ ์ธ์
์ ์น์ฌ์ดํธ ์์์ ์ฌ์ฉ์์ ์ํ๋ฅผ ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ์ .
HTTP ํ๋กํ ์ฝ์ ๋น์ฐ๊ฒฐ์ฑ๊ณผ ๋ฌด์ํ์ ํน์ง์ ๊ฐ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์ฐ์์ ์ธ ์ํ๋ฅผ ์ ์งํ๊ฒ ํด์ค๋ค.
์ฟ ํค๋ ํด๋ผ์ด์ธํธ ์ธก, ์ฆ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์์ ๋ฐ์ดํฐ ํ์ผ์ด๋ค.
์น ์๋ฒ๋ HTTP ์๋ต์ ํตํด ์ฟ ํค๋ฅผ ์ฌ์ฉ์์ ์ปดํจํฐ์ ์ ์กํ๊ณ , ์ดํ ์ฌ์ฉ์๊ฐ ๋์ผํ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ์ฟ ํค๋ฅผ ์๋์ผ๋ก ํด๋น ์์ฒญ๊ณผ ํจ๊ป ์๋ฒ๋ก ๋ณด๋ธ๋ค. ์ด๋ฅผํตํด ์๋ฒ๋ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ณ ์ด์ ์ํ๋ฅผ ๊ธฐ์ตํ๊ฒ ๋๋ค.
์ธ์ ์ ์๋ฒ์ธก์์ ๊ด๋ฆฌ๋๋ค. ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ์ ์ ์ํ์ฌ ์์ ์ ์์ํ ๋ ์๋ฒ๋ ์ธ์ ID๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ์กํ๊ณ , ์ด ์ธ์ ID๋ฅผ ํตํด ์๋ฒ๋ ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์งํ๋ค. ์ธ์ ID๋ ๋ณดํต ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋์ง๋ง, ์ค์ ๋ฐ์ดํฐ๋ ์๋ฒ์ ์ ์ฅ๋๋ค.
์ฌ์ฉ์์ ์ธ์ฆ์ ๊ด๋ฆฌํ๋ ๋งค์ปค๋์ฆ ์ค ํ๋.
์ธ์
๊ฐ์ ๊ฒฝ์ฐ ๋ค์ ๋์ ์ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊บผ์ง๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
์ด๋ด ๊ฒฝ์ฐ, ๋ชจ๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ์ด ํ๊ธธ ์ ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด HDD๋ DB๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด ์๋๊ฐ ๋๋ฆฌ๊ฒ ๋๋ค.
ํด๊ฒฐ์ฑ ์ผ๋ก ๋ ๋์ค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌํ DB ์๋ฒ๋ฅผ ์ฌ์ฉํ์ง๋ง, ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ์ง ๋ชปํ๋ค.
๊ทธ๋์ ์ด๋ฌํ ๋ถ๋ด์ ์์ด ๊ณ ์๋ ๊ฒ์ด ๋ฐ๋ก ํ ํฐ ๋ฐฉ์์ด๋ค.
ํ ํฐ ์ธ๊ฐ ๋ฐฉ์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ ์ด๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉ์์๊ฒ ํ ํฐ(Token)์ ๋ฐ๊ธํด์ค๋ค.
์ด ํ ํฐ์ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํ๊ฒ ๋๋ฉฐ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ์ด ํ ํฐ์ ๋ณด๋ด์ด ์ฌ์ฉ์ ์ํ๋ฅผ ์ ์งํ๋ค.
ํ ํฐ ๋ฐฉ์ ์ค ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ์์ด JWT์ด๋ค.
Json์ผ๋ก ๋ ์น ํ ํฐ์ด๋ผ๋ ๋ป.
์ฃผ๋ก ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ์ ๋ณด ๊ตํ์ ์ฌ์ฉ๋๋ฉฐ, ์น ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ HTTP ํค๋๋ฅผ ํตํด ์ ์ก๋๋ค.
JWT๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
ํด๋๋ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
ํ ํฐ ํ์
typ ๋ฅผ ๋ํ๋ด๋ JWT ๊ฐ๊ณผ, ์๋ช
์ ํด์ฑํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์๊ณ ๋ฆฌ์ฆ alg๋ฅผ ๋ช
์ํ๋ค.
์๋ฅผ ๋ค์ด, HMAC SHA-256 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ JSON ๊ฐ์ฒด๋ก ํํ.
{
"alg" : "HS256"
"type" : "JWT"
}
ํ์ด๋ก๋๋ ํด๋ ์์ด๋ผ๊ณ ํ๋ ์ผ๋ จ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์.
ํด๋ ์์ ์ธ๊ฐ์ง ์ ํ์ผ๋ก ๋๋จ ๋ฑ๋ก๋, ๊ณต๊ฐ, ๋น๊ณต๊ฐ ํด๋ ์.
ํด๋ ์์ ๋ฐ์ดํฐ๋ ํ ํฐ์ ๋๊ฐ ๋๊ตฌ์๊ฒ ๋ฐ๊ธํ๋์ง, ์ ํจ์๊ฐ, ์๋น์ค๊ฐ ์ฌ์ฉ์์๊ฒ ๊ณต๊ฐํ๊ธฐ ์ํ๋ ๋ด์ฉ(๋๋ค์, ์๋น์ค ์ ๋ ๋ฒจ, ๊ด๋ฆฌ์ ์ฌ๋ถ) ๋ฑ์ ์ ๋ณด๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ ๋ณด์ ๋ง๋ฃ ์๊ฐ์ ํฌํจํ๋ ํ์ด๋ก๋๋
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
์๋ช ์ ํ ํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ธ์ฆ์ ๋ณด์ฅํ๊ธฐ ์ํด ์์ฑ๋๋ค.
ํค๋์ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด๊ณผ ํ์ด๋ก๋์ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ํฉ์น๊ณ , ์ ๊ณต๋ ๋น๋ฐํค๋ฅผ ํตํด alg ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด์ฑํ๋ค.
์๋ฅผ๋ค์ด, HS256 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT ์ต์ข ํํ๋ ์ ์ธ ๋ถ๋ถ์ ์ (.)์ผ๋ก ์ฐ๊ฒฐํ ๋ฌธ์์ด์ด๋ค
Base64Url(header).Base64Url(payload).Base64Url(signature)
์๋ฒ๋ ์ฌ์ฉ์ ์์ฒญ๊ณผ ํจ๊ป ์ค์ด๋ณด๋ธ ํ ํฐ์ 1๋ฒ ํค๋์ 2๋ฒ ํ์ด๋ก๋์ ์๋ฒ์ ๋น๋ฐํค๋ฅผ alg ์๊ณ ๋ฆฌ์ฆ์ ๋ฃ๊ณ ๋๋ฆฐ๋ค.
๊ทธ๊ฒ์ด 3๋ฒ ์๋ช
๊ฐ๊ณผ ์ผ์นํ๋ค๋ฉด ์ธ๊ฐํ๊ฒ ๋๋ค.
์ด๋ ๊ฒ JWT๋ฐฉ์์ ์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ ์ฌ์ฉ์๋ค์ ์ํ๋ฅผ ์ ์ฅํ ํ์ ์์ด ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์๋ฒ์ ๋น๋ฐํค๋ก ํ์ธ๋ง ํด์ฃผ๋ฉด ์์ ์ธ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค ์ ์๋ค.
๊ทธ๋ฌ๋ JWT์ ๊ฒฐ์ ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ ํด๋น ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์๋ฒ์์ ๊ธฐ๋กํ๊ฑฐ๋ ์ถ์ ํ์ง ์๋ ๊ฒ์ด๋ค.
์๋ฅผ๋ค์ด ํ ๊ธฐ๊ธฐ์์๋ง ๋ก๊ทธ์ธ ๊ฐ๋ฅํ ์๋น์ค๋ฅผ ํ ๋ ๋ค๋ฅธ ๊ธฐ๊ธฐ๋ก ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์๊ฐ ์๋ค๋ฉด. ๊ธฐ์กด ๊ธฐ๊ธฐ์ ์ฃผ์๋ ํ ํฐ์ ๋ค์ ๋ฐํํ ์ ์๊ณ ํ ํฐ ๊ธฐ๋ก๊ณผ ์ถ์ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๋ํ ํ ํฐ์ด ํ์ทจ๋นํ ๊ฒฝ์ฐ ํด๋น ํ ํฐ์ ๋ฌดํจํ ํ ์ ์๋ค.
์ด๋ฅผ ๋ณด์ํ ๋ฐฉ๋ฒ์ด access & refresh ํ ํฐ ๋ฐฉ์.
ํ ํฐ์ ๋ ๊ฐ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ช ๋ถ์ดํ ์งง์ access ํ ํฐ๊ณผ 2์ฃผ ์ ๋๋ก ๊ธด refresh ํ ํฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค.