๋ฒ์คํ ๋ ๋ด๋ ๋์ , ๋ด๊ฐ ์ด ๋ฒ์ค๋ฅผ ํ ์ ์๋ ์ฌ๋์ด๋ผ๋ ์๊ฒฉ์ ์ฆ๋ช ํ๋ ์๋จ
๊ถํ์ ์ฃผ๊ธฐ ์ํด์, ์ ์ ์ฆ๋ช
๋จ์ HTTP ์์ฒญ์ stateless
(๋ฌด์ํ์ฑ, ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์)์ ํน์ง์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๊ธฐ ์ํด ํ ํฐ์ ์ฌ์ฉํด ์ธ์ฆํ์ฌ โ์ โ000โ์ด๋ ๊ธฐ๋ฅ ์คํ ํด์ฃผ์ธ์โ ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ต์ ๋ฐ์์ฌ ์ ์๋ค.
๐ง JSON Web Token
ํ ํฐ์ ๋ง๋๋ ๊ธฐ์ ์ ์ด๋ฆ์ด๋ฉด์ ์ด ๊ธฐ์ ๋ก ๋ง๋ค์ด์ง ํ ํฐ์ JWT๋ผ๊ณ ํ๋ค.
์ผ์ชฝ Encoded๋ ๋ฌธ์๊ฐ JWT ํ ํฐ์ ํํ๋ก,
Decodeํ๋ฉด ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ด Header, Payload, Signature๋ก ๋ถ๋ฅ๋๋ค.
์ํธํ ๊ท์น
- ์ํธํ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง์ ๋ํ ๊ท์นํ ํฐํ์
๋๊ฐ
, ์ธ์
, ์ด๋ป๊ฒ
iat
- ์ธ์ ๋ฐ๊ธ๋์๋์ง์ ๋ํ ๋ฐ์ดํฐ ์กฐ๊ฐโ Header + Payload + '์ํฌ๋ฆฟ ํค' =Signature
์ ์ ๊ฐ ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด (์ฌ๋ฐ๋ฅธ ์ ์ ์ ๋ณด๊ฐ ์ ๋ฌ๋์์ ๋) ์๋ฒ์์ Signature๋ฅผ ์์ฑํด์ ๋ด๋ ค์ค๋ค. (ํด๋ผ์ด์ธํธ์์ ์์ฑํ๋ ๊ฒ ์๋!)
์๋ฒ์์ ํด๋น JWT๊ฐ ์ ํจํ ๊ฒ์ธ์ง ํ์ธํ๊ธฐ ์ํจ์ผ๋ก,
ํด๋ผ์ด์ธํธ๋ ๋ฌด์์ ๋ฃ์ด์ ์ํธ๊ฐ์ด ๋์๋์ง ์ ์ ์๋ค.
์๋ฒ๋ ์์ ์ด ์๊ณ ์๋ ์ํฌ๋ฆฟ ํค๋ ๊ฐ์ด ํฉ์ณ์ ๋ค์ ํด์ฑ์ ํ์ฌ ๊ฒ์ฆํ ์ ์๋ค.
๐ง ์๋ฒ์์๋ ์ํธํ ๋์ง ์์ secret key๊ฐ ์๊ณ , signature์์๋ ์ํธํ ๋ secret key๊ฐ ์๋ค.
๐ง ํด์ฑ์ด๋?
๋ค๋ก ๋์๊ฐ ์ ์๋ ์ํธํ ๊ธฐ๋ฒ, ์ฆ ๋จ๋ฐฉํฅ์ผ๋ก๋ง ๊ฐ๋ฅํ๋ค.
๋ณตํธํ(ํธ๋ ๊ฒ)๋ฅผ ํ ์ ์๋ค.
์๋ฒ๋ ์์ ์ด ๊ฐ๊ณ ์๋ ์ํฌ๋ฆฟ ํค ๊ฐ๊ณผ ๊ฐ์์ง ํ์ธ์ ํ๋ค.
Signature๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ฑ์ ํ๋ค๋ฉด ํค๋์ ํ์ด๋ก๋ ๋ชจ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋ค์ด๊ฐ์ ๊ฒ์ด๋ผ๊ณ ๊ฒ์ฆํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋งค์ฐ ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ๋ฌธ์
XSS
๋ผ๋ ๊ณต๊ฒฉ Script๋ฅผ ํตํ ํดํน์ ์ํ์ด ์๋ค.
CSRF
- ์ฟ ํค์ ์ ์ฅํ ๋ ์ ์ ๊ฐ ์ด๋ค ์คํธ์ ๋ฐ์์ ์ค์๋ก ๋งํฌ๋ฅผ ๋๋ ์ ๋ ํด๋น ๋งํฌ์ธ ์
์ฑ์ฌ์ดํธ๋ฅผ ํตํด ์๋ฒ ์ ๋ณด๋ฅผ ๊ธ์ด์ค๋ฉด์ ์ฟ ํค์ ์๋ ํ ํฐ์ ํ๋ํด๋ฒ๋ฆด ์ ์๋ค.
httpOnly true
์ค์ ์ผ๋ก ๋ฐฉ์ด