Real JWT (Feat. ์ฟ ํค ์ธ์ )
์ ์ ๊ฐ๋ฐ์์ ํฌํธํด๋ฆฌ์ค์ ๊ธฐ๋ณธ ์คํ์ผ๋ก ํฌํจ๋๋ ๊ฒ ์ค์ ํ๋๋ JWT๋ฅผ ํ์ฉํ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ด๋ฏธ ์ ๋ง์ ๊ธฐ์ ์์๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์ฟ ๋ฒ๋คํฐ์ค ๋์ ์ ์๋ํ๋ค๊ฐ ํฌ๊ธฐํ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ์ด๋ค. ์ฌ์ง์ด ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ๊ณ ๋ คํ๋ค๊ฐ ์คํ๋ ค ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ๋ก ์ ํํ๋ ์ฌ๋ก๋ ์ฐพ์ ์ ์๋ค.
์ค๋์ JWT ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ์ ์ ์งํ๋ ๊ฒ์ ๋ํด์ ์ด์ผ๊ธฐ ํด๋ณด๊ณ ์ ํ๋ค. ๋ฏธ๋ฆฌ ๋งํ์๋ฉด, ์ค๋ฌด์์ JWT ํ ํฐ์ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด ์์ผ๋ฉฐ ํฌ์ง ์์ ์์คํ ์ ๊ฐ๋ฐํ๊ณ ์๋ ํ ํฌ ๋ฆฌ๋๋ก์จ์ ์๊ฐ์ด๋ค.
๊ณผ์ฐ ์ฟ ํค ์ธ์ ๋ณด๋ค ํจ์จ์ ์ธ๊ฐ ๐ค
์ฌ์ฉ์ ์ธ์ฆ์ JWT๋ฅผ ๋์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ณด๋ฉด ๋๋ถ๋ถ ์ธ์ ์ ๋ํ ๋นํจ์จ์ฑ์ ์ด์ผ๊ธฐํ๋ค. ์์คํ ์ ๊ท๋ชจ์ ํธ๋ํฝ์ด ๋ง์์ง๋ ๊ฒฝ์ฐ ์ธ์ ์ ์กฐํํ๋ ๊ณผ์ ์์ ๊ณผ๋ถํ๋ฅผ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์์ด๋ณด์ด๋ ๊ฑด ์ฌ์ค์ด๊ณ ์ธ์ ํด๋ฌ์คํฐ๋ง์ ์ํํ๋คํ๋๋ผ๋ ์ค์ํ ๋์ด๋ฒ๋ฆฌ๋ ๊ตฌ์กฐ๋ก ์ธํด ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ๋์ด๋ ์ ์๋ค. ์๋ฒ๊ฐ ์ธ์ ์ ์ง๋ฅผ ์ํด ๋ด๋นํ๋ ๋ถํ ๋ฟ๋ง ์๋๋ผ ๊ณ ๋ คํด์ผํ ๊ฒ์ ์ธํ๋ผ์ ๋ํ ๋น์ฉ์ผ์ง ๋ชจ๋ฅธ๋ค. AWS ํ๊ฒฝ์์ HTTPS API ๋น์ฉ์ ์ค์ด๋ ๋ฐฉ๋ฒ๋ ๊ณต์ ๋๋ ๊ฒ์ฒ๋ผ ์์ ํจํท์ ์ฐจ์ด๋ ์๊ฐ๋ณด๋ค ๋ง์ ๋น์ฉ์ด ๋์ด๋ ์ ์๋ค๋ ์ด์ผ๊ธฐ๋ค.
JWT์ ๊ฐ์ฅ ํฐ ๋จ์ ์ JSON์ผ๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ Base64 ์ธ์ฝ๋ฉํ์ฌ ๊ตฌ์ฑํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณด์์ ์ธ ๊ด์ ์ด ๋์์๋ก ํค ๊ธธ์ด๊ฐ ๊ธด RSA ๋๋ ECC ํค๋ก ๊ตฌ์ฑ๋ ๊ณต๊ฐํค ๊ธฐ๋ฐ์ ์๋ช ์ ํ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฐ๋ฅธ ํค๋ก ์๋ช ํ ์ ์๋๋ก JWK๋ ์ ๊ณตํ๊ฒ ๋ ๊ฒ์ด๋ค. ์๋ฌดํผ ๋ณด์์ผ๋ก ์ธํด ํค ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก Base64 ์ธ์ฝ๋ฉ ํน์ง์ผ๋ก ์ธํด HTTP ํต์ ํจํท์ ์ฌ์ด์ฆ๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ปค์ง ์ ์๋ค๋ ๋ง์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์์ฒญ๊ณผ ์๋ต ํ์ด๋ก๋ ํฌ๊ธฐ๋ก ์ธํด ๋ง๋ํ ํธ๋ํฝ ๋น์ฉ์ด ๋ฐ์ํ ์ ์๋ค๋ ๊ฒ๊ณผ ๋์ผํ๋ค.
๋ณด์ ์ง์์ ์ดํดํ ์ ์๋๊ฐ ๐ต
JWT์ ๋ํ ์์ธ ๊ตฌํ์ ๊ฐ๋ฐ์์ ์ญ๋์ ์๊ธฐ์ ์ฌ๋ฌ๊ฐ์ง ๋ณด์ ์ง์์ด๋ ๊ด์ ์ด ํ์ํ๋ค. ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ ํต์ ์ ์ํด์๋ ๋ฐ๋์ HTTPS ์ฐ๊ฒฐ์ ํตํด ํจํท์ ์์ ํ๊ฒ ๋ณดํธํด์ผํ๋ค. ๊ธฐ๋ณธ์ ์ธ ์ํธํ ํต์ ์ ํ ํฐ์ ์์ ํ๊ฒ ๋ณดํธํ ์ ์๋ ์ต์ํ์ ๋ฐฉ์ด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ธ์ด๋ง๋ค ๊ฐ๋ฐ์๋ค์ ์ํ JWT ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์์ง๋ง ๊ทธ๊ฒ์ ํ์ฉํด์ ์ ๋๋ก ํ์ฉํ๋ ค๋ฉด ๋ณด์ ์ง์์ ์ดํดํ๊ณ ์์ด์ผ ํ๋ค. HS256๊ณผ RS256์ ์ฐจ์ด๋ฅผ ์๊ธฐ ์ํด์๋ ๊ณต๊ฐํค ๊ธฐ๋ฐ ์ํธํ์ ๋ํ ๊ธฐ๋ณธ ์ง์์ด ํ์ํ๋ค. ๊ฐ์ธ์ ์ธ ๊ฒฌํด๋ก๋ ์ ์ ๊ฐ๋ฐ์ ๋ฟ๋ง ์๋๋ผ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ค์ด HTTPS๋ฅผ ์ดํดํ๋ ๊ฒ์กฐ์ฐจ๋ ์ฝ์ง ์๋ค๊ณ ์๊ฐํ๋ค.
๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์ธ ์คํค ์ฌ์ดํธ๋ฅผ ๋ณด๋๋ผ๋ HTTPS๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง JWT๋ก ๊ตฌ์ฑ๋ ์ก์ธ์ค ํ ํฐ๊ณผ ๋ฆฌํ๋์ ํ ํฐ์ ์ฟ ํค๋ก ๊ด๋ฆฌํจ์๋ Secure ์ SameSite ์์ฑ์ ์ ๋๋ก ์ ์ฉํ์ง ์์์ ๋ณผ ์ ์๋ค. ์ด๊ฒ์ ์์คํ ๋ณด์ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ผ์ ์๋ฐฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๊ณ ๊ฒ์ถ๋์ด ์กฐ์น ๋์์ด ๋ ์ ์๋ ์ค์ํ ๋ถ๋ถ์ด๋ค.
์ค์ ๋ก ์ ์ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ๋ฅผ ์งํํ๋ค๋ณด๋ฉด ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ๊ตฌํํ๋๋ผ๋ ์ธ์ ์ ๋ํ ์ดํด์ ๊ฒฝํ์ด ๋ถ์กฑํ๋ค๊ณ ๋๊ปด์ง ๋งํผ ์ ๋๋ก ๋ ๋ต๋ณ์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๋นํ๋ค. ์ฌ์ง์ด OAuth ์์ ๋ก๊ทธ์ธ์ ๋ณ๋๋ก ์ฌ์ฉํ์์๋ ๋ถ๊ตฌํ๊ณ ํ ํฐ์ JWT๋ง ์๋ค๊ณ ๋งํ๋ ์ผ์ด์ค๋ ์์๋ค.
์ด๋ฌํ ๋ถ๋ถ๋ค์ ํตํด ์์ฒญ ๋์ ์ค๋ ฅ์ ์ญ๋์ ๋ณด์ ํ ์ ์ ์ด ์๋๊ณ ์์ผ ๊ฑฐ์ ๋ชจ๋ ์ ์ ์น ๊ฐ๋ฐ์๋ค์ ์ ํต์ ์ธ ์ธ์ ์ ๋ํ ๊ฒฝํ์ ์๊ณ ์ธ์ ์ ๋ํ ๋ฌธ์ ์ ์ ์ดํดํ๋ ๊ฒ์ด ๋ ์ค์ํ์ง ์์๊น ์๊ฐํด๋ณธ๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ ์ธ์ ์ ํ์ฉํ ํ๋ก์ ํธ๋ฅผ ํฌํธํด๋ฆฌ์ค๋ก์จ ๋ณด๊ณ ์ถ๋ค. JWT๋ฅผ ํ์ฉํ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ด ๋์ณ๋๋ ํฌํธํด๋ฆฌ์ค๋ค ์์์ ์คํ๋ ค ๊ฒฝ์๋ ฅ์ด ์์ด๋ณด์ด๋ ๊ฒ์ ๊ฐ์ฅ ๋จ์ํ ์ธ์ ์ ์ฌ์ฉํ ๊ฒ์ด ์๋๊น?โฆ