2022. 4. 11. 02:10ใ์ด๋ก ์ ๋ฆฌ/์ ๋ณด๋ณด์
๐ JWT(JSON Web Token)
๐ฝ ๊ฐ์
์ด์ฉ์๊ฐ Login์ ํ ๋, ํด๋น ํ์์ ๊ณ ์ ํ Token์ ๋ง๋ค์ด์ผ ํ๋๋ฐ, ๊ทธ๋ `JWT`๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด์์.
์ธ์ฆ์๋ ๋ํ์ 3์ธ๋ฐฉ์ด ์๋๋ฐ, `Cookie, Session, Token` ๋ฐฉ์์ด ์๋ ๊ฒ์ด์์.
JWT๋ ๋น์ฌ์๊ฐ์ ์ ๋ณด๋ฅผ `JSON` ๊ฐ์ฒด๋ก ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํ ๊ฐ๋ณ๊ณ , ๋ ๋ฆฝ์ ์ธ ๋ฐฉ์์ ์ ์ํ๋ ๊ฐ๋ฐฉํ ํ์ค(RFC 7519)์ธ ๊ฒ์ด์์. ์ด ์ ๋ณด๋ `Digital Sign` ๊ฐ๋ ์ด ๋ค์ด๊ฐ ์์ด ํด๋น ๊ฐ์ ํ์ธํ๊ณ , ์๋๋ฐฉ์ด ๋ณด๋๋ค๋ ๊ฒ์ ์ ๋ขฐํ ์ ์๋ ๊ฒ์ด์์.
์ข ๋ ๊ฐ๋จํ ์ด์ผ๊ธฐํ๋ฉด ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๊ธฐ ์ํด ํ์์ ๊ถํ ๊ฐ์ ๊ฒ์ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์น๊ตฌ์ธ ๊ฒ์ด์์.
JWT ๊ณต์ ํํ์ด์ง
๐ฆ ๊ตฌ์กฐ
JWT๋ ์์ ๊ฐ์ด ์๊ธด ๊ฒ์ด์์. ํฌ๊ฒ ์ธ๊ฐ์ง๋ก ๊ตฌ๋ถ์ด ๋๋ ๊ฒ์ด์์.
`Header`๋ Token์ ๋ํ `Meta Data`๋ฅผ ํฌํจํ๊ณ ์๋ ๊ฒ์ด์์.
`Meta Data`์์๋ `์ํธ ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ(SHA256, RSA ๋ฑ๋ฑ)`์ `Type`์ด ๋ค์ด ์๋ ๊ฒ์ด์์.
`Payload`๋ `ํ์ ์ ๋ณด(Issuer)`, `๋ง๋ฃ ๊ธฐ๊ฐ(Expiration Time)`, `์ฃผ์ (Subject)` ๋ฑ๋ฑ์ด ์ฌ ์ ์๋ ๊ฒ์ด์์.
์ฆ ๊ฐ์ฅ ์ค์ํ Data๊ฐ ๋ด๊ธฐ๋ ๋ถ๋ถ์ธ ๊ฒ์ด์์.
`Verify Signature`๋ JWT์ ๋ง์ง๋ง ์ธ๊ทธ๋จผํธ์ธ๋ฐ, Token์ ๋ณด๋ธ ์ฌ๋์ ์ํด ์ ์ ์๋ช ์ด ๋์์ผ๋ฉฐ, ์ด๋ค ์์ผ๋ก๋ ๋ณ๊ฒฝ๋์ง ์์๋์ง ํ์ธํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฒ์ด์์.
์๋ช ์ `Header`, `Payload`, `์ํธํํ ๊ฐ`์ ์ด์ฉํ์ฌ ๋ง๋ค์ด์ง๋ ๊ฒ์ด์์.
๐ฆ JWT ์ฌ์ฉ ํ๋ฆ
์ต์ด ํ์์ด Login์ ํ๋ฉด Token์ ์์ฑํ๊ฒ ๋๋๋ฐ, `Payload` ๋ถ์ ํ์ ์ด๋ฆ, ํ์ ์ญํ , Token ์์ฑ์ผ์, Token ๋ง๋ฃ ์ผ์์ ํจ๊ป ์ํธํ์ ์ฌ์ฉ๋ Key ๊ฐ(ํ๋ฌธ)์ ํฉ์ณ์ `Hash` ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋จ๋ฐฉํฅ์ผ๋ก ์ํธํ ํ๋ ๊ฒ์ด์์.
์ด๋ค ์ด์ฉ์๊ฐ ๊ด๋ฆฌ์๋ง ๋ณด๊ณ ์ถ์ ๋ด์ฉ์ ๋ณด๋ ค๊ณ ํ ๋์ ๊ด๋ฆฌ์๊ฐ ํด๋น ๋ด์ฉ์ ๋ณด๋ ค๊ณ ํ ๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น์?
์ต์ด Client์์๋ ์์ฒญ์ ๋ณด๋ผ ๋ ๋ณด๊ดํ๊ณ ์๋ Token(Login์ ๋ฐํ)์ `HTTP Request Header`์ ๋ฃ์ด ํจ๊ป Server์๊ฒ ๋ณด๋ด๊ฒ ๋๋ ๊ฒ์ด์์.
Server๋ ํด๋น ๊ฐ์ ๊ฒ์ฆํ๊ธฐ ์ํด Token์ ๋ค์ ๋ง๋ค์ด ๋ ๊ฐ๋ฅผ ๋น๊ตํ๋ ๊ฒ์ด์์.
์ด๋ ์์ฒญ์ผ๋ก ๋ค์ด์จ `JWT Header`์ `JWT Payload`๋ฅผ ๊ฐ์ ธ์ค๊ณ Server์์ ๊ฐ์ง๊ณ ์๋ ๋น๋ฐ๊ฐ์ ์ด์ฉํด์ `Signature` ๋ถ๋ถ์ ๋ค์ ๋ง๋๋ ๊ฒ์ด์์.
๊ทธ๋์ ๊ฐ์ด ๋ง๋ค๋ฉด ๊ด๋ฆฌ์๋ผ๊ณ ํ๋จํ๊ณ ํด๋น ๋ด์ฉ์ ๋ณผ ์ ์๊ฒ ํด์ฃผ๊ณ , ์๋๋ฉด ๊ด๋ฆฌ์๊ฐ ์๋๋ผ๊ณ ํ๋จํ๊ณ , ํด๋น ๊ฒ์๊ธ์ ๋ณด์ง ๋ชปํ๊ฒ ํ ์ ์๋ ๊ฒ์ด์์.
๐ฝ ์์ธ ๋ด์ฉ
๐ฆ Access Token๊ณผ Refresh Token ์ด์ผ๊ธฐ
JWT (Json Web Token)๋ ์ธ์ฆ์ ์ํด ์ฌ์ฉ๋๋ ํ ํฐ ํ์์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ์ข
๋ฅ์ ํ ํฐ์ ์ฌ์ฉํด์.
๋ฐ๋ก Access Token๊ณผ Refresh Token์ด์์.
์ข ๋ฅ | ์ญ ํ | ํน ์ง |
Access Token | ์ฃผ๋ก Client๊ฐ ๋ณดํธ๋ ์์(Resource) ์ ๊ทผ ์ ์ฌ์ฉ | โ
์งง์ ์ ํจ ๊ธฐ๊ฐ์ ๊ฐ์ง๋ฉฐ, ๋ณดํต ๋ช ๋ถ์์ ๋ช ์๊ฐ ์ ๋๋ก ์ค์ . โ Client๊ฐ Server์ Loginํ์ฌ ์ธ์ฆ ๋ฐ์ ๋ค ๋ฐ๊ธ. โ Client๋ Access Token์ HTTP Header๋, Query Parameter ๋ฑ์ ํตํด Server์ ์ ์ํ์ฌ ๋ณดํธ๋ ์์์ ์ ๊ทผํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒ์ฆ. โ ์ฃผ๋ก ์ธ๊ฐ(Authorization) Server์์ ๋ฐ๊ธ. |
Refresh Token | Access Token ๋ง๋ฃ ์ Refresh Token์ ์ฌ์ฉํ์ฌ ์๋ก์ด Access Token ๋ฐ๊ธ | โ
Access Token ๋ณด๋ค ๊ธด ์ ํจ ๊ธฐ๊ฐ์ ๊ฐ์ง๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์์ผ์์ ์์ฃผ์ผ ์ ๋ ์ค์ . โ Access Token ๋ง๋ฃ ํน์ ๊ฐฑ์ ํ์์ ์ฌ์ฉ. โ ์ฃผ๋ก ์ธ๊ฐ(Authorization) Server์์ ๋ฐ๊ธ. โ ๋ณด์ ์ ์ค์ํ ์ ๋ณด์ด๋ฏ๋ก, ์์ ํ ์ ์ฅ์(๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ฑ)์ ์ ์ฅ. |
์ฌ์ค JWT๋ฅผ ์ฌ์ฉํ ๋, Refresh Token์ ๊ตฌํํ๋ ๋ง๋์ ๋ํด ๊ฐ๋ก ์๋ฐ์ด ์กด์ฌํ๊ณ ์์ด์. ๊ทธ๋ ๋ค๋ฉด Refresh Token์ ์ฅ, ๋จ์ ์ ๋ฌด์์ด ์์๊น์?
์ฅ ์ | ๋จ ์ |
1. Access Token์ ์งง์ ์ ํจ ๊ธฐ๊ฐ์ผ๋ก ์ธํด Access Token ๋ง๋ฃ ์์๋ Refresh Token์ ์ฌ์ฉํ์ฌ ์๋ก์ด Access Token์ ์ป์ ์ ์๋ค. 2. ์ด์ฉ์ ๋ฐ ์ฌ์ฉ์๋ ์์ ์ด์ ๋ก ์์ฃผ Login์ ํ์ง ์์๋ ๋๋ค. |
1. ๋ณด์ ์ ์ฃผ์๊ฐ ๋์ฑ ํ์. Refresh Token์ด ๋
ธ์ถ๋๊ฒ ๋ ๊ฒฝ์ฐ ์
์์ ์ธ ์ฌ์ฉ์๊ฐ ๊ณ์ํด์ ์๋ก์ด Access Token์ ๋ฐ๊ธ ๋ฐ์ ์ ์๋ ๋ฌธ์ . 2. Refresh Token์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ์ด๋, ํ์ ์ ์ฑ ์ ์ค์ ํ์ฌ ๋ณด์ ๊ฐํ์ ๋ํ ๋ ธ๋ ฅ ํ์. |
์์ ๋ด์ฉ๋ค๋ก ์ธํด Refresh Token์ ์ฌ์ฉ ์ฌ๋ถ๋ ๋ณด์ ์๊ฑด, ์ด์ฉ์ ํน์ ์ฌ์ฉ์ ๊ฒฝํ ๋ฐ Application์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ ์ฉํ ์ง ๋ง์ง๊ฐ ๊ฒฐ์ ๋๊ฒ ๋ผ์.
Refresh Token์ ์์ ํ ์ ์ฅ์์ ๋ณด์์ ์ผ๋ก ๊ด๋ฆฌ๋๊ณ , ์ ์ ํ ๊ฐฑ์ ๋ฐ ํ์ ์ ์ฑ
์ด ์ ์ฉ๋๋ค๋ฉด Refresh Token์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋งค์ฐ ํจ์จ์ ์ธ ์ธ์ฆ/์ธ๊ฐ ๊ตฌํ ๋ฐฉ์์ผ ์ ์์ด์.
๋ค๋ง, ์ ์ ํ ๊ด๋ฆฌ ์์ด ์ฌ์ฉ๋ ๊ฒฝ์ฐ ๋ณด์ ์ํ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฃผ์๊ฐ ํ์ํด์.
'์ด๋ก ์ ๋ฆฌ > ์ ๋ณด๋ณด์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ ๋ณด๋ณด์ ์ด๋ก ] WAF, Web Application Firewall ์ด๋? (0) | 2023.02.21 |
---|---|
[์ด๋ก ์ ๋ฆฌ] IDS์ IPS๋? (0) | 2023.02.21 |
[HTTP Network] JWT - JSON Web Token (0) | 2022.01.18 |
[HTTP Network] Session (0) | 2022.01.18 |
CSRF(Cross Site Request Forgery) ๊ณต๊ฒฉ์ด๋? (0) | 2021.12.20 |