๐ ๋ฏธ๋ฆฌ ์๊ณ ์์ผ๋ฉด ์ข์ ์ง์
- Authorization(์ธ๊ฐ) : ์ฌ์ฉ์ ๊ฐ์ธ์ ๋ณด์ ๊ฐ์ ์์์ ์ ๊ทผํ ๋์ ๊ถํ์ ํ๋ํ๋ ๊ฒ. ์ด๋ Access token์ผ๋ก ๊ถํ์ด ๋ถ์ฌ๋จ.
- Authentication(์ธ์ฆ) : ์ฌ์ฉ์์ ์ ์์ ๊ฒ์ฆํ๋ ํ์. ๋ณด์ ํ๋ก์ธ์ค์ ์ฒซ๋ฒ์งธ ๋จ๊ณ์ ํด๋น ID/PW ์ ๋ ฅ์ด ๊ฐ์ฅ ๋ณดํธ์ ์ธ ์ธ์ฆ ๋ฐฉ์์. ์์ฆ์๋ ์์ฒด์ธ์์ผ๋ก๋ ์งํํ๊ณ ์์.
JSON Web Token์ ์ฝ์.
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ธ์ฆ๋์๋ค๋ ์๋ฏธ๋ก ํ ํฐ์ ๋ฐ๊ธํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์.
Base64๋ก ์ธ์ฝ๋ฉ ๋์ด์๊ณ , ์จ๋ผ์ธ ๋๋ฒ๊ฑฐ๋ฅผ ํตํด JSONํํ๋ก ๋์ฝ๋ฉํจ.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ๋ง๋ค ์์ฒญ์ ํค๋์ ํ ํฐ์ ๋ด์ ํจ๊ป ์์ฒญ
ํ ํฐ๊ณผ ํจ๊ป ์จ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฒ๊ฐ ์ค์ค๋ก ์ ๊ณตํ๋ ํ ํฐ๊ณผ ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ํ, ์ ์์ ์ธ ์์ฒญ์ธ์ง๋ฅผ ํ์ธํ๋ค.
ํฌ๊ฒ Header
. Payload
. Signature
ํํธ๋ก ๋๋ ์ ์์.
๐ JWT์์ ์์ฃผ ์ฌ์ฉ๋๋ JSON ํค ์ด๋ฆ
sub
: ์ธ์ฆ์ ์ฃผ์ (subject)iss
: ํ ํฐ์ ๋ฐ๊ธ์ฒtyp
: ํ ํฐ์ ์ ํ (type)alg
: ์๋ช ์ ์๊ณ ๋ฆฌ์ฆiat
: ๋ฐ๊ธ ์๊ฐ (issued at)exp
: ๋ง๋ฃ ์์(expiration time)aud
: ํด๋ผ์ด์ธํธ(audience)
์ฟ ํค์ ์ธ์
์ ์ฌ์ฉํ ๋์๋ ์๋ฒ ๋จ์ ๋ก๊ทธ์ธํ ๋ชจ๋ ์ฌ์์์ ์ธ์
์ DB๋ ์บ์์ ์ ์ฅํ ํ, ์ฟ ํค๋ก ๋์ด์จ ์ธ์
ID๋ก ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ผ๋ง ํ๋ค. ๋ํ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ํํ ๋ฐ์ํ๋ CORS๋ฌธ์ ๋ ํด๊ฒฐํด์ผ๋ง ํ๋ค.
๊ทธ์น๋ง JWT๋ ํ ํฐ ์์ฒด์ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ ์ฅ์์ ํ ํฐ์ ๊ฒ์ฆํ๊ธฐ ํ๋ฉด ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ๊ฐ ๋์ด๋๋๋ผ๋ ์ฌ์ฉ์ ์ธ์ฆ์ ๋ค์ด๊ฐ๋ ์ธํ๋ผ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
๐คCORS : Cross Origin Resource Sharing, ํ ๋๋ฉ์ธ์ด ๋ค๋ฅธ ๋๋ฉ์ธ๊ฐ ๊ฐ์ง ๋ฆฌ์์ค์ ์ก์ธ์ค๋ฅผ ํ ์ ์๊ฒ ํ๋ ๋ณด์ ๋ฉ์ปค๋์ฆ. ์ด์ ์๋ ๋์ผํ ๋๋ฉ์ธ์์ ๋ฆฌ์์ค๋ฅผ ๋ฐ์์๋ค๋ฉด, ์ง๊ธ์ ํด๋ผ์ด์ธํธ์์ ๋ค๋ฅธ ์๋ฒ๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ฌ์ฉํ๋ ์ผ์ด ๋ง์์ง๋ฉด์ ์๊ธฐ๊ฒ ๋์๋ค๊ณ ํ๋ค.
ํ ํฐ์ ์ ํ๊ณผ ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ๋ช ์ํ๋ ๋ถ๋ถ
{
"typ" : "JWT",
"alg" : "HS256" // ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก์, HMAC, RSA๊ฐ ์์๋ก ์๋ค. signature๋ถ๋ถ์์ ์ฌ์ฉ๋จ.
}
claim์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์ฌ์ฉ์์ ์ธ์ฆ/์ธ๊ฐ ์ ๋ณด๊ฐ ๋ด๊ธฐ๋ ๋ถ๋ถ
{
"sub" : "1234567890",
"lat" : 152459873
}
JWT์ ํต์ฌ. ํ ํฐ์ ์๋ณ์กฐ ์ฌ๋ถ๋ฅผ ํ์ธํ๋๋ฐ์ ์ฌ์ฉ, header/payload๋ฅผ Base64URLEncode๋ฅผ ์ ์ฉํ์ฌ ๊ฐ์ธ ํค๋ก ์๋ช ํ ํ, header-alg์์ ๋ช ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํจ.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload), "YourSecretKeyValue
)
JWT(JSON Web Token)๋ JSON๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ self-contained ๋ฐฉ์์ผ๋ก ๋ ๊ฐ์ฒด์์ ์ ๋ณด๋ฅผ ๊ฐ๋ณ๊ณ ์์ ์ฑ ์๊ฒ ์ ๋ฌํด์ค๋ค. JWT์ ํต์ฌ์ ์ธ ํน์ง์ธ self-contained๋ ํ ํฐ ์์ฒด์ ์ฌ์ฉ์์ ๊ถํ ์ ๋ณด๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ๋ณด๊ฐ ํฌํจ๋๋ค๋ ๊ฒ์ผ๋ก ํ ํฐ์ ๋ํ ๊ธฐ๋ณธ์ ๋ณด, ์ ๋ฌํ ์ ๋ณด, ํ ํฐ์ด ๊ฒ์ฆ๋์๋ค๋ ๊ฒ์ ์ฆ๋ช ํด์ฃผ๋ signature์ ํฌํจํ๊ณ ์๋ค.
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋ฉด ์๋ฒ๊ฐ ํด๋น ์ ์ ์ ํ ํฐ(JWT)์ ์ ์ ์๊ฒ ์ ๋ฌํ๊ณ
์ ์ ๊ฐ ์๋ฒ์ ์์ฒญํ ๋ ํ ํฐ์ ํฌํจํด์ ์ ๋ฌ,
์๋ฒ๋ ํด๋น ํ ํฐ์ด ๊ถํ์ด ์๋์ง ์ ํจํ๊ณ ์ธ์ฆ๋์๋์ง ํ์ธํ๊ณ ์์
์ ์งํํ๋ค.
JWT์ ๊ฒฝ์ฐ ์ ๋ณด๊ฐ sign ๋์ด์๊ธฐ ๋๋ฌธ์ ์ ๋ณด๋ฅผ ๋ณด๋ธ ์ด ๊ฐ ๋ฐ๋์ง ์์๋์ง, ์ ๋ณด๊ฐ ๋์ค์ ์กฐ์๋์ง๋ ์์๋์ง ๊ฒ์ฆํ ์ ์๋ค.
๐ ์์ฒญ ์ค ํ ํฐ์ด ํ์ทจ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ Access Token์ ์ ํจ๊ธฐ๊ฐ์ ์งง๊ฒ ์ค์ ํ๊ณ , Refresh Token์ ๊ฐ์ด ๋ฐ๊ธํ์ฌ Access Token์ด ํ์ทจ๋นํ๋๋ผ๋ ์๋์ ์ผ๋ก ํผํด๋ฅผ ์ต์ํ์ํฌ ์ ์๋ค.
๊ฐ๋ฐ์๋ก์ ์ฑ์ฅํ๋ ๋ฐ ํฐ ๋์์ด ๋ ๊ธ์ด์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.