๐ JWT ๋?
JWT๋ JSON ํฌ๋งท์ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ๋ํ ์์ฑ์ ์ ์ฅํ๋ claim
๊ธฐ๋ฐ์ web token
์
๋๋ค.
ํ ํฐ ์์ฒด๋ฅผ ์ ๋ณด๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ self-contained ๋ฐฉ์
์ด๋ผ๊ณ ํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
JWT์๋ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํ ํฐ์ ํฌํจํ๊ธฐ ๋๋ฌธ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ์๋ฒ์์ ์ปค๋ฎค๋์ผ์ด์
์ค๋ฒ ํค๋๋ฅผ ์ต์ํ
ํ ์ ์์ต๋๋ค.
๋ํ ์๋ฒ๋ JWT ์์ฑ ์ JWT ์ ๊ฒ์ฆ์ด๋ ๊ถํ ์ธ๊ฐ ์ ํ์ํ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์
JWT ์ ๋ํ ์ํ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ์ง ์์ stateless
ํ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๐ JWT ๊ตฌ์กฐ
JWT ๋ header
, payload
, signature
์ธ ๊ฐ์ง๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๊ฐ ๋ถ๋ถ์ base64-URLSAFE
๋ก ์ธ์ฝ๋ฉ ๋์ด ํํ๋๋ฉฐ .
๊ตฌ๋ถ์๋ฅผ ํตํด ๊ตฌ๋ถํฉ๋๋ค.
HEADER.PAYLOAD.SIGNATURE
๐ก Base64 URL Safe Encoding ์ด๋?
๊ธฐ๋ณธ Base64 ์ธ์ฝ๋ฉ์์ +(plus)๋ -(minus)๋ก, /(slash)๋ _(underscore)๋ก๋์ฒด๋ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด๋ก ์ธํด์ JWT๋ ์ค๊ณ ์๋๋๋ก URL, Cookie, Header ๋ฑ์ด๋์์๋ ์ฌ์ฉ๋ ์ ์๋ ๋์ ๋ฒ์ฉ์ฑ์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
HEADER ์๋ ํ ํฐ์ ํ์
๊ณผ ํด์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ
์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
PAYLOAD ์๋ ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด์ ์กฐ๊ฐ๋ค์ธ ํด๋ ์(claim)
์ด ๋ด๊ฒจ ์์ต๋๋ค.
claim
์ key-value
์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ํ ํฐ์๋ ์ฌ๋ฌ๊ฐ์ ํด๋ ์์ ๋ฃ์ ์ ์์ต๋๋ค.
SIGNATURE ๋ HEADER ์ PAYLOAD ๋ฅผ ํฉ์น ๋ฌธ์์ด์ ์๋ช ํ ๊ฐ์ ๋๋ค.
๐ JWS ? JWE ?
JWT
๋ฅผ ์ด์ฉํ ์๋ช
์ด๋ ์ํธํ
์ ๋ํ ๋ช
์ธ๋ JWT
ํ์ JWS
์ JWE
์ ๋์ด์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ JWT๋ JWS
๋ฅผ ์ฌ์ฉํ๊ณ
JWS Compact Serialization ์ผ๋ก ์ง๋ ฌํ ํ ๋ฌธ์์ด์ ๋๋ค.
์ด๋ ์ผ๋ฐ์ ์ผ๋ก ํต์ ์ ๊ตฌ๊ฐ ์ํธํ๊ฐ ํ์ํ๋ค๋ฉด TLS๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
JWE๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ ํ์๊ฐ ์์ต๋๋ค.
JWS
๋ JSON ์ผ๋ก ์ ์ ์๋ช
์ ํ์ฌ URL-SAFE ๋ฌธ์์ด๋ก ํํํ ๊ฒ
์ด๋ฉฐ
JWE
๋ JSON์ ์ํธํํ์ฌ URL-SAFE ๋ฌธ์์ด๋ก ํํํ ๊ฒ
์
๋๋ค.
์ฌ๊ธฐ์ ์๋ช
์ ์๋ช
ํ ๋ ์ฌ์ฉํ ํค๋ฅผ ์ฌ์ฉํด์
JSON ์ด ์์๋์ง ์์๋์ง ํ์ธ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ๋ง์ฝ ์ฐ๋ฆฌ์ JWS
๊ฐ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด
์ด๋ฅผ JWE
๋ฅผ ์ฌ์ฉํด์ ๋ ํ๋ฒ ์ํธํํ ์๋ ์์ง๋ง
์ธ์ฆ ํ ํฐ๊ณผ ๊ฐ์ ์์คํ
์์ JWE
๋ง ์ฌ์ฉํ๋ ๊ฒ์ ๋์ผ์ค์
๋๋ค.
๐ JWT ์ ๋จ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
self-contained
์ด๊ธฐ ๋๋ฌธ์ ์๋ ์ ๊ฒ์ด ๋ ์ ์์ต๋๋ค.
payload
๊ฐ ๊ธธ์ด์ง๋ฉด ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค ์๋ ์์ต๋๋ค.
payload
์์ฒด๋ base64
๋ก ์ธ์ฝ๋ฉ ๋์ด ์์ง๋ง ์ํธํ ๋ ๊ฒ์ด ์๋๋ผ์ ์ค๊ฐ์ ํ์ทจํด ๋์ฝ๋ฉ ํ ์ ์์ต๋๋ค.
stateless
ํ๊ธฐ ๋๋ฌธ์ ํ๋ฒ ๋ง๋ค์ด์ง๋ฉด ์ ์ด๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ํ ํ ํฐ์ ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ ํฐ์ ์ ์ฅํด์ผ ํฉ๋๋ค.
Bearer Token
์ผ๋ฐ์ ์ผ๋ก ํ ํฐ์ ์์ฒญ ํค๋์ Authorization
ํ๋์ ๋ด์์ ธ ๋ณด๋ด์ง๋๋ค.
Authorization: <type> <credentials>
bearer
๋ ์ ํ์์์ <type>
์ ํด๋นํฉ๋๋ค.
๋ค์ํ type ์ด ์กด์ฌํ๋ฏ๋ก ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
(JWT ํน์ OAuth์ ๋ํ ํ ํฐ์ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค.)
๐ ์ฐธ๊ณ ์๋ฃ
JWT๋ฅผ ์๊ฐํฉ๋๋ค. : TOAST Meetup
JWT (JSON Web Token) ์ดํดํ๊ธฐ์ ํ์ฉ ๋ฐฉ์ - Opennaru, Inc.
[Server] JWT(Json Web Token)๋?
'๐ archive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Haskell Tutorial] Hello World! (0) | 2022.11.28 |
---|---|
[Design Pattern] PUB-SUB ํจํด (0) | 2022.06.13 |
Cookie & Web Storage (0) | 2022.05.22 |
[Vue.js] ๋ฐ์ํ ์์คํ ์ ๋ด๋ถ ๋์ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ (0) | 2022.03.07 |
[Vue.js ์ํ๊ด๋ฆฌ 3ํธ] Vuex ์ธ์ , ์ด๋ป๊ฒ ์จ์ผํ ๊น? (0) | 2022.03.07 |
๐ฌ ๋๊ธ