์ธ์
๊ธฐ๋ฐ ์ธ์ฆ์ ์๋ฒ(or DB)์ ์ ์ ์ ๋ณด๋ฅผ ๋ด๋ ๋ฐฉ์์ผ๋ก, ๋งค ์์ฒญ๋ง๋ค DB๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ๋ถํธํ๊ณ ์๋ฒ์ ๋ถ๋ด์ ์ค๋ค.
๋ฐ๋ผ์ ์๋ฒ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด ๊ณ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ๋ํ์ ์ธ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ JWT(JSON Web Token)์ด ์๋ค.
ํ ํฐ์ ์ํธํ๋ ์ํ์ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ฉฐ, ์ํธํํ๊ธฐ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ๋ด์ ์ ์๋ค. ๋ฐ๋ผ์, ํด๋ผ์ด์ธํธ์์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๋ค.
Json Web Token์ ์ฝ์๋ก, Json ํฌ๋งท์ผ๋ก ์ฌ์ฉ์์ ๋ํ ์์ฑ์ ์ ์ฅํ๋ ์น ํ ํฐ์ ์๋ฏธํ๋ค.
์์ธ์ค ํ ํฐ(Access Token) ๊ณผ ๋ฆฌํ๋ ์ ํ ํฐ(Refresh Token) ์ ํ์์ ๋ง๊ฒ ์ด์ฉํด ์ธ์ฆ์ ๊ตฌํํ๋๋ฐ, ๊ถํ์ ๋ถ์ฌ ๋ฐ๋๋ฐ์๋ ์์ธ์ค ํ ํฐ๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋๊ณ , ์ ๋ณด๋ฅผ ์งํค๋ ๊ฒ์ด ์ค์ํ ์น์ฌ์ดํธ์ ๊ฒฝ์ฐ, ๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
๊ถํ ๋ถ์ฌ์ ๊ต์ฅํ ์ ์ฉํ๋ค.
์๋ฅผ๋ค์ด A์ฑ์์ Gmail๊ณผ ์ฐ๋๋์ด ์ด๋ฉ์ผ์ ์ฝ์ด์์ผํ๋ค๋ฉด, ์ ์ ๊ฐ Gmail ์ธ์ฆ ์๋ฒ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ ๋, JWT๋ฅผ ๋ฐ๊ธ๋ฐ๊ณ , A์ฑ์ JWT๋ฅผ ์ฌ์ฉํด ์ ์ ์ Gmail ์ด๋ฉ์ผ์ ์ฝ์ ์ ์๊ฒ๋๋ ๊ฒ์ด๋ค.
์ธ ๋ถ๋ถ ๋ชจ๋ base64 ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉ๋๋ค.
1. Client -> Server : ID/password๋ฅผ ๋ด์ ๋ก๊ทธ์ธ ์์ฒญ
2. Server : ID/password ํ์ธ ํ, Client์ ๋ณด๋ผ ์ํธํ๋ ํ ํฐ ์์ฑ(access, refresh ๋ชจ๋ ์์ฑ)
3. Server -> Client : ํ ํฐ ์ ์ก
4. Client : ํ ํฐ ์ ์ฅ(in Local Storage, Session Storage, Cookie ๋ฑ)
5. Client -> Server : HTTP Header(Authentication Header) ๋๋ ์ฟ ํค์ ํ ํฐ์ ๋ด์์ ์ ์ก(ex. Cookie์๋ refresh ํ ํฐ, body์๋ access ํ ํฐ ๋ด์์ ์ ์ก), Authentication Header ์ฌ์ฉ ์ Bearer Authentication์ ์ด์ฉ.
6. Server : ํ ํฐ ํด๋ , ๋ฐ๊ธํด์ค ํ ํฐ์ด ๋ง๋ค๋ฉด Client์ ์์ฒญ์ ์ฒ๋ฆฌ ํ ์๋ต ์ ์ก
๋ฌด์ํ์ฑ & ํ์ฅ์ฑ(Statelessness & Scalability)
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๊ณ , ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋ณด๋ผ๋ ๋ง๋ค ํ ํฐ์ ํค๋์ ํฌํจ์ํค๋ฉด ๋๋ค.
์ํธํํ ํ ํฐ์ ์ฌ์ฉํ๊ณ , ์ํธํ ํค๋ฅผ ๋
ธ์ถํ ํ์๊ฐ ์๊ธฐ๋๋ฌธ์ ์์ ํ๋ค.
์ด๋ ์๋ฒ์์๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
๊ถํ ๋ถ์ฌ์ ์ ์ฉํ๋ค.
payload ์์ ์ด๋ค ์ ๋ณด์ ์ ๊ทผ ๊ฐ๋ฅํ ์ง ์ ํ ์ ์๋ค.
Reference: ์ฝ๋์คํ
์ด์ธ
https://hackernoon.com/using-session-cookies-vs-jwt-for-authentication-sd2v3vci