์ฟ ํค, ์ธ์ , JWT
๐์ธ์ฆ, ์ธ๊ฐ
์ธ์ฆ (Authentication)
์ธ์ฆ์ ์ ์์ ํ์ธํ๋ ํ๋ก์ธ์ค์
๋๋ค.
๋น๋ฐ๋ฒํธ, ํ๋์จ์ด ํ ํฐ, ๊ธฐํ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ธ๊ฐ (Authorization)
์ธ๊ฐ๋ ์ธ์ฆ ์ดํ์ ํ๋ก์ธ์ค์ ๋๋ค. ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ์ด๋ ํ ์์์ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ํ์ธํ๋ ์ ์ฐจ๊ฐ ๋ฐ๋ก ์ธ๊ฐ์ด๋ค.
๋น๊ต
- ์ฌ์ดํธ์ ๊ฐ์ ๋ ์ฌ์ฉ์๋ผ๋ ๊ฒ์ ์ฆ๋ช ํ๋ ๊ฒ์ ์ธ์ฆ
- ์ธ์ฆ ํ์ ํ์ด์ง ์ ๊ทผ ๊ถํ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ ์ธ๊ฐ
๐ ๋ก๊ทธ์ธ์ด๋?
์ฌ์ฉ์๊ฐ ์์คํ ์ ์ ๊ทผํ๊ฑฐ๋ ๋์์ ์ํํ๋ ๊ฒ์ ์ ์ดํ๊ณ ๊ธฐ๋กํ๊ธฐ ์ํ ์ปดํจํฐ ๋ณด์ ์ ์ฐจ
๋ก๊ทธ์ธ์ด ํ์ํ ์ด์ ์ ๊ตฌํ์ ์ํด ํด์ผํ๋ ๊ฒ์?
1. ์ฌ์ฉ์ ์๋ณ
ํด๋น ํ์ด์ง์ ์ ๊ทผํ๋ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ๊ตฌ๋ถํ๊ธฐ ์ํด
2. ์ ๊ทผ ๋ฐ ๋์ ์ ์ด
2-1. ๊ถํ์ด ์๋ ์์์ ์ ๊ทผํ์ง ์๋ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ
- ๊ด๋ฆฌ์ ์ ์ฉ ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ฐ ์ ์ ๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก github repo์ setting ๋ฒํผ์ด ๊ด๋ฆฌ์๋ฅผ ์ ์ธํ๊ณ ๋ ๋ณด์ฌ์ง์ง ์๋๋ก ์ค์
2-2. ๊ถํ์ด ์๋ ์์์ ์กด์ฌ๋ฅผ ๋ชจ๋ฅด๋๋ก ํ๊ธฐ
- ๊ด๋ฆฌ์ ํ์ด์ง์ ์ฃผ์๋ฅผ ์ผ๋ฐ ์ ์ ๊ฐ ์ง์ ์ ๋ ฅํ์ ๋ ์ค๋ฅ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค์ผ๋ก์จ ๊ถํ์ด ์๋ ํ์ด์ง&๋ฐ์ดํฐ๋ฅผ ์จ๊ธฐ๊ธฐ
3. ์ธ์ฆ ์ ๋ณด ๊ด๋ฆฌํ๊ธฐ
๋ก๊ทธ์ธ์ด ๊ณ์ ์ ์ง๋ ์ ์๋๋ก token์ ์ฟ ํค, ๋ก์ปฌ์คํ ๋ฆฌ์ง, ์น์ ์คํ ๋ฆฌ์ง์ ์ ์ฅ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์ฅํด๋์ง ์๋๋ค๋ฉด ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ ๋๋ ๋ก๊ทธ์ธ์ ํด์ผํ๊ณ , ์ฅ๋ฐ๊ตฌ๋๋ก ์ด๋ํ ๋๋ ๋ก๊ทธ์ธ์ ํด์ผํจ
์ฟ ํค? ์ธ์ ? JWT?
์๋ฒ๋ ๋ฌด์ํ์ฑ(stateless)๊ธฐ ๋๋ฌธ์ ์ํ ์ ์ฅ์ ํ์ง ์๊ธฐ ๋๋ฌธ์, ๋งค๋ฒ ์ฌ์ฉ์์๊ฒ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ์ ์ ์ง(์ธ์ฆ/์ธ๊ฐ)ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ค
1. ์ฟ ํค
HTTP ์ฟ ํค๋ ์๋ฒ์์ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ปํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ(Cookie)๋ฅผ ์ ์ฅํด ๋์๋ค๊ฐ ๋์ผํ ์๋ฒ๋ก ์ฌ์์ฒญ ์ ์ ๊ณต๋ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ์กํ๋ค.
โ ์ฟ ํค๋ฅผ ์ฌ์ฉํ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ๋
์๋ฒ๋ ID์ PW๋ฅผ Cookie์ ๋ด์ ์๋ตํ๊ณ ,
์ดํ ์์ฒญ๋ถํฐ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ID/PW๋ฅผ Cookie์ ๋ด์ ํจ๊ป ๋ณด๋ด๊ธฐ ๋๋ฌธ์,
์ธ์ฆ/์ธ๊ฐ๋ฅผ ์ํด ๋งค๋ฒ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ง ์์๋ ๋๊ฒ ๋๋ค.
โ ์ฅ์
- ๊ธฐ์กด ๋ก๊ทธ์ธ์ ์ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ์ฆ/์ธ๊ฐ๋ฅผ ์ํ ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ด ํ์ ์๋ค.
- ์๋ฒ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ธฐ๋๋ฌธ์ ์๋ฒ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ ์๊ณ , Statelessํ๋ค๊ณ ํ ์ ์๋ค.
โ ๋จ์
- ์ฌ์ฉ์์ ์ฃผ์ ์ ๋ณด๋ฅผ ๋งค๋ฒ ์์ฒญ์ ๋ด์์ผ ํ๊ธฐ์ ๋ณด์์ด ์ทจ์ฝํ๋ค.
2. ์ธ์
์ฟ ํค์ ์ทจ์ฝํ ๋ณด์์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ธ์
Session์ ๊ณ ๊ฐ์ ์ฃผ์ ์ ๋ณด๊ฐ ์๋, ๋จ์ง ๊ณ ๊ฐ์ ์๋ณํ ์ ์๋ ๊ฐ ์์ฑํด Cookie๋ก ์ฃผ๊ณ ๋ฐ๋๋ค.
์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ดํ ๋ก๊ทธ์์ ํน์ ๋ก๊ทธ์ธ ๋ง๋ฃ๊น์ง์ ๊ธฐ๊ฐ
โ ์ธ์ ๋ฅผ ์ฌ์ฉํ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
A ์ฌ์ฉ์๊ฐ ID/PW๋ฅผ ํตํด ๋ก๊ทธ์ธ์ ํ๋ค๋ฉด
A์ฌ์ฉ์๋ฅผ ์๋ณํ ์ ์๋ ๊ฐ๋ฅผ ์์ฑํด Cookie๋ก ๋ธ๋ผ์ฐ์ ์ ์ฌ๊ณ ๋งค๋ฒ ์์ฒญ ๋๋ง๋ค ์์ฑํ ๊ฐ์ ํตํด ์ธ์ฆ/์ธ๊ฐ๋ฅผ ์๋์ผ๋ก ์งํํ๋ค.
์ด ๋ ์์ฑ๋๋ ์ฌ์ฉ์ ์๋ณ ๊ฐ์ Session ID๋ผ ํ๋ค.
โ ์ฅ์
- ์ฟ ํค๋ณด๋ค ๋ณด์์ด ๋น๊ต์ ์ข๋ค.
โ ๋จ์
- ์ฌ์ฉ์๋ฅผ ์๋ณํ ์ ์๋ ๊ฐ์ ์์ฑํ๊ณ ์๋ฒ์ ์ ์ฅํด๋์ด์ผ ํ๋ค.
- ์๋ฒ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๋ค.
- Statelessํ๋ค๊ณ ํํํ ์ ์๋ค. (์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์)
Token?
์ฌ์ฉ์๋ฅผ ์ธ์ฆํ ์ ์๋ ์ ๋ณด๊ฐ ์จ๊ฒจ์ง ์ํธํ๋ Access Token์ ๋ฐํํ๊ณ , ์ธ์ฆ์ด ํ์ํ ๋๋ง๋ค ์๋ฒ์ Token๊ณผ ํจ๊ป ์์ฒญ์ ๋ณด๋ธ๋ค. ์๋ฒ๋ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ Token ํด๋ ์ ํตํด Token ์์์ ์ฌ์ฉ์๋ฅผ ์๋ณํ ์ ์๋ ์ ๋ณด๋ค์ ์์๋ด๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ธ์ฆ/์ธ๊ฐ๊ฐ ์๋์ผ๋ก ์งํํ๋ค.
3. JWT (Json Web Token)
JSON ํํ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํ ํ ํฐ
โ JWT ๊ตฌ์กฐ
- Header: ํ ํฐ์ ์ํธํํ๋๋ฐ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ, ํ ํฐ ํํ
- PAYLOAD: ์ฌ์ฉ์ ์ ๋ณด
- sub: ํ ํฐ ์ ๋ชฉ
- iat: ์ธ์ ๋ฐ๊ธ๋์๋์ง
- SIGNATURE: ์ํธํ๋ฅผ ์ํ ๋ฐ์ดํฐ,
- MY_SECRET_KEY : ์๋ฒ๋ง ์๊ณ ์๊ณ , ์๋ฒ์ ๋น๊ตํ์ฌ ์ ํจ์ฑ ๊ฒ์ฌํ ๋ฐ์ดํฐ
โ ํ ํฐ ์ฌ์ฉํ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
์๋น์ค์ ๋ก๊ทธ์ธ ์์ฒญ์ ํ๋ฉด ์๋น์ค๋ ํด๋ผ์ด์ธํธ์๊ฒ ํ ํฐ์ ๋ฐ๊ธํ๊ณ , ์ ๋ฌํ๋ค.
ํด๋ผ์ด์ธํธ๋ ๋ฐ๊ธ๋ฐ์ ํ ํฐ์ ๋ณด๊ดํ๊ณ ์๋ค๊ฐ ํ ํฐ์ ์ฌ์ฉํด ์ธ์ฆ/์ธ๊ฐ๋ฅผ ์์ฒญํ๋ค.
โ ํ ํฐ ์ฌ์ฉํ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ - ์ค์ ์๋น์ค
์ ์ ์ง์
ํ ํ ํฐ์ ๊ฐ์ง๊ณ ์๋ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค์ ๋จ๊ณ ๊ฒฐ์
1-1. ํ ํฐ์ด ์๋ ๊ฒฝ์ฐ ์๋ฒ์ token์ ์ ํจ์ฑ์ ํ์ธ
- ํ ํฐ์ด ์ ํจํ๋ค๋ฉด ๋ก๊ทธ์ธ ์ฑ๊ณต!
- ํ ํฐ์ด ์ ํจํ์ง ์๋ค๋ฉด ๋ก๊ทธ์ธ ์งํ
1-2. ํ ํฐ์ด ์๋ค๋ฉด ๋ก๊ทธ์ธ ์งํ
- ์ฌ์ฉ์์ id์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ์ ์๋ฒ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ , ์๋ฒ์์ ์๋ก์ด token์ ๋ฐ๊ธ๋ฐ์์ ๋ก๊ทธ์ธ ์ฑ๊ณต!
์ฐธ๊ณ ์ฌ์ดํธ
- ํ๋ฆฌ์จ๋ณด๋ฉ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
- ์ง๋ง์ผ ๊ธฐ์ ๋ธ๋ก๊ทธ - ์ธ์ฆ/์ธ๊ฐ๋ ์ด๋์ ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ ๊น?