์ธ์
๊ธฐ๋ฐ ์ธ์ฆ์์ ์๋ก์ด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์์ ๋๋ง๋ค ์๋ฒ๋ ๋งค๋ฒ DB์์ ํ์ธํ๋ค. ์ด ๋ถ๋ด์ ๋์ด๋ด๊ธฐ ์ํด ๊ณ ์ํ ๋ฐฉ๋ฒ์ด ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ด๋ค.
๋ํ์ ์ธ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ JWT(Json Web Token)์ด ์๋ค.
์ฐ๋ฆฌ ์ผ์์ํ์์ ์๋ ํ ํฐ์ ์๋์ ๊ฐ๋ค.
์ฆ, ๊ฐ ์์ค์ ๋ง๋ ํ ํฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ํด๋น ์์ค์ ์ด์ฉํ ์ ์๋ค.
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ํด๋ผ์ด์ธํธ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ ์๋์๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์๊ฒ ํ ํฐ์ ๋ณด์ฌ์ฃผ๊ณ ๋ค์ํ ๊ธฐ๋ฅ์ ์์ฒญํ ์ ์๋ค.
์ค์ํ ๊ฑด ํด๋ผ์ด์ธํธ์ ํ ํฐ์ ๊ทธ๋๋ก ๋ด๋ ๊ฒ์ด ์๋๋ผ ์ํธํํ ํ ํฐ์ ๋ด์์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๋ํ์ ์ธ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๊ธฐ์ ์ด๋ค. Jsonํฌ๋งท์ผ๋ก ์ฌ์ฉ์์ ๋ํ ์์ฑ์ ์ ์ฅํ๋ ์น ํ ํฐ์ด๋ค. JWT๋ 2๊ฐ์ ์ข ๋ฅ๊ฐ ์๋ค.
๋ณดํธ๋ ์ ๋ณด๋ค(์ฌ์ฉ์์ ์ด๋ฉ์ผ, ์ฐ๋ฝ์ฒ, ์ฌ์ง ๋ฑ)์ ์ ๊ทผํ ์ ์๋ ๊ถํ๋ถ์ฌ์ ์ฌ์ฉํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ฒ์ ์ธ์ฆ์ ๋ฐ๊ฒ ๋ ๋ acess token, refresh token 2๊ฐ๋ฅผ ๋ค ๋ฐ์ง๋ง ์ค์ ๋ก ๊ถํ์ ์ป๋ ๋ฐ ์ฌ์ฉํ๋ ํ ํฐ์ access token ์ด๋ค.
๊ถํ๋ถ์ฌ ๋ฐ๋๋ฐ๋ access token๋ง ์์ผ๋ฉด ๋์ง๋ง, ๋ง์ฝ access token์ด ๊ณต๊ฒฉ์๋ก๋ถํฐ ํ์ทจ ๋นํ๋ค๋ฉด ์ค์ ์ ๋ณด๊ฐ ๊ณต๊ฒฉ์ ์์ ๋์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๊ฑธ ๋ฐฉ์งํ๊ธฐ ์ํด access token์ ์งง์ ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํ๋๋ฐ, ์ด๋ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๋ค๋ฉด refresh token์ ์ฌ์ฉํด ์๋ก์ด access token์ ๋ฐ๊ธ๋ฐ๋๋ค. ๊ทธ๋ผ ์ฌ์ฉ์๋ ์ฌ๋ก๊ทธ์ธํ ํ์๊ฐ ์๋ค.
๊ณต๊ฒฉ์๊ฐ access token์ด ๋ง๋ฃ๋ ๋๋ง๋ค ์๋ก ๋ฐ๊ธํ๊ธฐ ๋๋ฌธ์ ํฐ ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ด๋ค. ์ ์ ์ ํธ์๋ณด๋ค ์ ๋ณด๋ฅผ ์งํค๋ ๊ฒ์ด ๋ ์ค์ํ ์น์ฌ์ดํธ๋ค์ refresh token์ ์ฌ์ฉํ์ง ์๋ ๊ณณ์ด ๋ง๋ค. ๋ฐ๋ผ์ Oauth, ์ฟ ํค, ์ธ์ ๋ฑ๋ฑ ๊ฐ ๋ฐฉ๋ฒ๋ค์ ์ฅ๋จ์ ์ ์ฐธ๊ณ ํ๋ฉฐ ํ์์ ๋ง๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
JWT๋ . ์ ๊ธฐ์ค์ผ๋ก ์ธ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
ํค๋๋ ์ด๊ฒ์ด ์ด๋ค ์ข ๋ฅ์ ํ ํฐ์ธ์ง, ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก sign(์ํธํ) ํ ์ง๊ฐ ์ ํ์๋ค.
{
"alg": "HS256",
"typ": "JWT"
}
์ด JSON ๊ฐ์ฒด๋ฅผ base64 ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉํ๋ฉด JWT์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ด ์์ฑ๋๋ค.
ํ์ด๋ก๋์๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๋ค. ์ด๋ค ์ ๋ณด์ ์ ๊ทผ ๊ฐ๋ฅํ์ง์ ๋ํ ๊ถํ์ ๋ด์ ์๋ ์๊ณ , ์ฌ์ฉ์์ ์ ์ ์ด๋ฆ ๋ฑ ํ์ํ ๋ฐ์ดํฐ๋ ์ด๊ณณ์ ๋ด์ ์ํธํ ์ํจ๋ค. ๋ฌผ๋ก ์ํธํ(ํค๋์์ ์ ์ํ)๊ฐ ๋ ์ ๋ณด์ง๋ง, ๋ฏผ๊ฐํ ์ ๋ณด๋ ๋๋๋ก ๋ด์ง ์๋ ๊ฒ์ด ์ข๋ค.
{
"sub": "someInformation",
"name": "phillip",
"iat": 151623391
}
์ด JSON ๊ฐ์ฒด๋ฅผ base64๋ก ์ธ์ฝ๋ฉํ๋ฉด JWT์ ๋ ๋ฒ์งธ ๋ถ๋ถ์ด ์์ฑ๋๋ค.
base64๋ก ์ธ์ฝ๋ฉ๋ ์ฒซ๋ฒ์งธ, ๋๋ฒ์งธ ๋ถ๋ถ์ด ์์ฑ ๋์๋ค๋ฉด, ์ํ๋ ๋น๋ฐ ํค(์ํธํ์ ์ถ๊ฐํ salt)๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํํ๋ค. base64 ์ธ์ฝ๋ฉ์ ํ ๊ฐ์ ๋๊ตฌ๋ ์ฝ๊ฒ ๋์ฝ๋ฉํ ์ ์์ง๋ง, ์๋ฒ์์ ์ฌ์ฉํ๊ณ ์๋ ๋น๋ฐํค๋ฅผ ๋ณด์ ํ๊ฒ ์๋๋ผ๋ฉด ์ฝ๊ฒ ํด๋ ํ์ง ๋ชปํ๋ค.
์๋ฅผ ๋ค์ด, ๋ง์ฝ HMAC SHA256 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค๋ฉด signature๋ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฑ๋๋ค.
HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);
Headers: {Authorization: "Bearer JWT_TOKEN"}