[๋คํธ์ํฌ] ์ฟ ํค ๋ฐฉ์๊ณผ ์ธ์ ๋ฐฉ์์ ๊ณ ๋ฏผํ๋ ์ด์ + ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค ๊ณต์
- ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ฏ๋ก ์๋์ ์ผ๋ก ์ทจ์ฝํจ
- ์ ์ฅ ์์น : ํด๋ผ์ด์ธํธ (๋ธ๋ผ์ฐ์ )
- ์ฉ๋ ์ ํ : ์ฝ 4KB
- ํ์ฅ์ฑ : ์๋ฒ ๋ฌด๊ด(ํด๋ผ์ด์ธํธ ์ ์ฅ) -> ํ์ฅ์ฑ ์ข์
- ์๋ : ์๋ฒ ๋ถ๋ด ์ ๊ณ , ๋น ๋ฆ
- ์ธ์ ์ ์ง : ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ฏ๋ก ์ค๋ ์ ์ง ๊ฐ๋ฅ
- ์ค์ ํ์ฉ : JWT ๊ธฐ๋ฐ ํ ํฐ ์ธ์ฆ ๋ฑ
- ์๋ฒ์ ์ ์ฅ๋์ด ๋ณด์์ฑ์ด ๋์
- ์ ์ฅ์์น : ์๋ฒ
- ์ฉ๋ ์ ํ : ์๋ฒ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ฅ์ ์ฉ๋๋งํผ
- ํ์ฅ์ฑ : ์๋ฒ ์ ์ฅ -> ์๋ฒ ๊ฐ ์ธ์ ๊ณต์ ํ์
- ์๋ : ์๋ฒ ๋ฆฌ์์ค ์ฌ์ฉ, ๋๋ฆด ์ ์์
- ์ธ์ ์ ์ง : ์ผ๋ฐ์ ์ผ๋ก ์ผ์ ์๊ฐ ํ ๋ง๋ฃ๋จ
- ์ค์ ํ์ฉ : ๋ก๊ทธ์ธ ์ํ ์ ์ง ๋ฑ
์ง์ง ์ค์ํ๊ฒ ๊ณ ๋ คํด์ผ ํ๋ ๋ถ๋ถ์
1. ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ์ฌ์ฉ์ ์๊ฐ ๋ง์๊ฐ 2. ๋ณด์์ด ์ค์ํ๊ฐ 2๊ฐ์ง ๊ฒฝ์ฐ์ธ ๊ฒ ๊ฐ๋ค.
- Token๊ธฐ๋ฐ ์ธ์ ๋ฐฉ์ : accessToken์ statelessํ๊ฒ, refreshToken์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด๋๊ณ ์ฌ์ฉํ๋ ๋ฐฉ์
ํ ํฐ ๋ฐฉ์์ผ๋ก ์ธ์ฆ/์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ํฌ๋ฆฟ ์ฐฝ 2๊ฐ์์ ๋์ผํ IP, ID๋ก ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋๊ฐ์ ๋ํ ๊ณ ๋ฏผ์์ ์์๋์๋ค.
๋์ค ๋ก๊ทธ์ธ์ผ๋ก refresh_token_value์ ๋ฎ์ด์ด๋ค
- ๋ฐ์๋ ์ ์๋ ๋ฌธ์ ์ : ์ฒซ๋ฒ์งธ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ ํ ํฐ์ด ๋ง๋ฃ๋์๋์ง / ํ ๋ฒ๋ ๋ก๊ทธ์ธ์ ํด์ 401์ด ๋๊ฑด์ง ์ ์๊ฐ ์๋ค
- ๋ฐฑ์๋ : 401 ์๋ต ์ ๋ณธ๋ฌธ์ { code: "TOKEN_EXPIRED" }, { code: "REPLACED_BY_NEW_LOGIN" } ๋ฑ ํฌํจ
- ํ๋ก ํธ : ์ธ๋ถ ์๋ต ๋ฉ์์ง ํ์ธํ, localstorage ์ง์ฐ๊ณ ์ธ๋ถ ์๋ต ์ฌ์ฉ์์๊ฒ ์๋ดํ์ฌ ๋ค์ ๋ก๊ทธ์ธ์ด ํ์ํจ์ ๋ช ์
ํ ์ ์ ๊ฐ ์ฌ๋ฌ ํ ํฐ์ ๋ณด์ ํ ์ ์์ผ๋ฉด ๊ฐ ๋ก๊ทธ์ธ ๋ง๋ค ๊ณ ์ session_id์ ์์ฑํ๋ค
์ด ๊ตฌ์กฐ๋ฉด ์ฌ๋ฌ ์ํฌ๋ฆฟ ์ฐฝ / ๋ธ๋ผ์ฐ์ / ๊ธฐ๊ธฐ์์ ๋์์ ๋ก๊ทธ์ธํ ์ ์๋ค
๋จ ๋ณด์์ ๊ด๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํ๋ค.
๊ด๋ฆฌ ํ์ด์ง์์ ์ฌ์ฉ์์๊ฒ ๋ณธ์ธ ํ ํฐ ๋ชฉ๋ก ๋ณด์ฌ์ค (PC, ๋ชจ๋ฐ์ผ, MFA ์ฌ๋ถ, ๋ง์ง๋ง ์ ์ ์๊ฐ)
ํ์ทจ ์์ฌ์ ๊ฐ๋ณ ํ ํฐ๋ง ํ๊ธฐ ๊ฐ๋ฅ (R2.revoked = true)
token_table (
token_id UUID PRIMARY KEY,
user_id UUID,
refresh_token TEXT,
user_agent TEXT,
ip_address TEXT,
created_at TIMESTAMP,
last_used_at TIMESTAMP,
revoked BOOLEAN DEFAULT FALSE, # ํ๊ธฐ ์ฌ๋ถ
client_type ENUM('WEB', 'MOBILE'), # ์น/๋ชจ๋ฐ์ผ ๋ฐฉ์ ๊ตฌ๋ถ
device_info TEXT, #์ฅ์น ์ธ์ฆ(Device binding)
mfa_verified BOOLEAN DEFAULT FALSE # MFA๋ฏธ์ธ์ฆ์ ๊ถํ์ ํ
)
์น - RefreshToken์ Secure, HttpOnly ๋ก ์ค์
์ฑ - Access/Refresh Token์ Authorization ํค๋๋ก ๋ณด๋, ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ refresh token์ ์ฅ
ํ ๋ฒ ์ฌ์ฉํ Refresh Token์ ๋ฌดํจํํ๊ณ ์ Refresh Token๋ฐ๊ธ์ ์งํํด์ผ ํ๋ค.