Skip to content

Commit ae2d49f

Browse files
committed
docs: update authentication documentation to reflect current implementation
1 parent 216d499 commit ae2d49f

2 files changed

Lines changed: 72 additions & 24 deletions

File tree

docs/AUTH.ko.md

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,28 @@ sequenceDiagram
3131
### 1. 백엔드 (FastAPI - `apps/api/`)
3232

3333
**필수 파일:**
34+
3435
- `src/lib/auth.py` - JWE 토큰 생성/검증, OAuth 검증
3536
- `src/auth/router.py` - 인증 endpoint
3637
- `src/users/model.py` - User DB 모델
3738
- `src/lib/dependencies.py` - 인증용 dependency injection
3839

3940
**핵심 함수:**
41+
4042
- `create_access_token(user_id)` - 만료 1시간의 JWE access token 생성
4143
- `create_refresh_token(user_id)` - 만료 7일의 JWE refresh token 생성
4244
- `decode_token(token)` - JWE 토큰 검증 및 payload 추출
4345
- `verify_oauth_token(provider, token)` - OAuth 토큰 재검증 (Google/GitHub/Facebook)
4446
- `get_current_user(request)` - Authorization header에서 사용자 추출
4547

4648
**Endpoints:**
49+
4750
- `POST /api/auth/login` - OAuth 로그인
4851
- `POST /api/auth/refresh` - 토큰 갱신
4952
- `POST /api/auth/logout` - 로그아웃
5053

5154
**보안:**
55+
5256
- JWE 암호화 (A256GCM)
5357
- Access Token: 만료 1시간
5458
- Refresh Token: 만료 7일
@@ -57,11 +61,14 @@ sequenceDiagram
5761
### 2. 프론트엔드 (Next.js - `apps/web/`)
5862

5963
**필수 파일:**
64+
6065
- `src/lib/auth.ts` - Better Auth 서버 설정 (OAuth providers)
61-
- `src/lib/auth-client.ts` - API client (Orval 자동 생성, 토큰 관리)
66+
- `src/lib/auth-client.ts` - Better Auth 클라이언트 및 토큰 교환 로직
67+
- `src/lib/api-client.ts` - HTTP 클라이언트 및 토큰 관리 (interceptors)
6268
- `src/app/api/auth/[...all]/route.ts` - Better Auth route handler
6369

6470
**핵심 동작/함수:**
71+
6572
- Better Auth OAuth 로그인 (signIn.social)
6673
- OAuth → 백엔드 JWT 교환 (자동)
6774
- Authorization header 자동 주입
@@ -70,20 +77,23 @@ sequenceDiagram
7077
- 로그아웃 시 토큰 정리
7178

7279
**보안:**
80+
7381
- localStorage 저장 (prefix: `fullstack_`)
7482
- JWE 토큰 (백엔드 발급)
7583
- Authorization header 자동 설정
7684

7785
## 토큰 관리
7886

7987
### Access Token
88+
8089
- **형식:** JWE (JSON Web Encryption)
8190
- **알고리즘:** A256GCM (AES-256-GCM)
8291
- **만료:** 1시간
8392
- **저장 위치:** `localStorage.fullstack_access_token`
8493
- **사용:** API 요청 시 `Authorization: Bearer {token}` header
8594

8695
### Refresh Token
96+
8797
- **형식:** JWE
8898
- **알고리즘:** A256GCM
8999
- **만료:** 7일
@@ -171,17 +181,20 @@ Backend: Logout processing (client token invalidation if needed)
171181
## 보안 기능
172182

173183
### 1. JWE 암호화
184+
174185
- **완전 암호화:** payload 전체를 암호화
175186
- **알고리즘:** A256GCM (AES-256-GCM)
176187
- **장점:** (일반적인 JWT(JWS)와 달리) payload가 노출되지 않음
177188
- **Authentication Tag (authTag):** 무결성(Integrity) 보장 및 위변조 탐지
178189

179190
### 2. Stateless 특성
191+
180192
- **서버 세션 없음:** 세션 상태를 서버에 저장할 필요 없음
181193
- **확장 용이:** 로드 밸런싱이 쉬움
182194
- **스케일 아웃:** 서버 증설이 쉬움
183195

184196
### 3. 토큰 만료 전략
197+
185198
- **Access Token:** 짧은 만료(1시간) - 보안 최적화
186199
- **Refresh Token:** 긴 만료(7일) - 사용자 편의성
187200
- **Auto Refresh:** 만료 시 자동 갱신
@@ -215,14 +228,6 @@ DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/app
215228

216229
# Better Auth (OAuth only)
217230
BETTER_AUTH_URL=http://localhost:3000
218-
219-
# OAuth Providers (optional)
220-
GOOGLE_CLIENT_ID=
221-
GOOGLE_CLIENT_SECRET=
222-
GITHUB_CLIENT_ID=
223-
GITHUB_CLIENT_SECRET=
224-
FACEBOOK_CLIENT_ID=
225-
FACEBOOK_CLIENT_SECRET=
226231
```
227232

228233
### 프론트엔드 (apps/web/.env)
@@ -247,9 +252,11 @@ FACEBOOK_CLIENT_SECRET=
247252
## API Endpoints
248253

249254
### POST /api/auth/login
255+
250256
**목적:** OAuth token을 백엔드 JWT로 교환
251257

252258
**Request Body:**
259+
253260
```json
254261
{
255262
"provider": "google" | "github" | "facebook",
@@ -260,6 +267,7 @@ FACEBOOK_CLIENT_SECRET=
260267
```
261268

262269
**Response:**
270+
263271
```json
264272
{
265273
"access_token": "<JWE encrypted access token>",
@@ -269,16 +277,19 @@ FACEBOOK_CLIENT_SECRET=
269277
```
270278

271279
### POST /api/auth/refresh
280+
272281
**목적:** refresh token으로 새로운 access token 발급
273282

274283
**Request Body:**
284+
275285
```json
276286
{
277287
"refresh_token": "<JWE encrypted refresh token>"
278288
}
279289
```
280290

281291
**Response:**
292+
282293
```json
283294
{
284295
"access_token": "<JWE encrypted new access token>",
@@ -288,27 +299,36 @@ FACEBOOK_CLIENT_SECRET=
288299
```
289300

290301
### POST /api/auth/logout
302+
291303
**목적:** 클라이언트 측 토큰 정리
292304

293305
**Response:** 204 No Content
294306

295-
## Orval 자동 생성 API Client
307+
## 클라이언트 토큰 관리
296308

297309
### auth.ts
310+
298311
Better Auth 서버 설정을 담당하는 파일입니다.
299312

300313
### auth-client.ts
301-
FastAPI schema로부터 Orval이 자동 생성한 API client입니다.
314+
315+
Better Auth 클라이언트 초기화 및 OAuth 토큰을 백엔드 JWE 토큰으로 교환하는 로직을 담당합니다.
316+
317+
### api-client.ts
318+
319+
토큰 자동 주입 및 갱신을 위한 interceptor가 설정된 수동 Axios 인스턴스입니다.
302320

303321
**핵심 함수:**
322+
304323
- `exchangeOAuthForBackendJwt()` - OAuth → 백엔드 JWT 자동 교환
305324
- `setAccessToken()` - access token 저장
306325
- `setRefreshToken()` - refresh token 저장
307326
- `clearTokens()` - 전체 토큰 정리
308327
- `hasBackendAccessToken()` - 백엔드 토큰 존재 여부 확인
309328

310329
**자동 기능:**
311-
- Authorization header 자동 주입
330+
331+
- Authorization header 자동 주입 (`apiClient` interceptor)
312332
- 401 에러 발생 시 자동 토큰 갱신
313333
- 재시도 큐 관리
314334
- In-memory 토큰 저장 (Map + localStorage)
@@ -326,18 +346,22 @@ FastAPI schema로부터 Orval이 자동 생성한 API client입니다.
326346
## 주요 장점
327347

328348
### 1. 성능 개선
349+
329350
- Better Auth 서버 호출 감소 (~50-100ms 절감)
330351
- 백엔드 부하 감소
331352

332353
### 2. 확장성
354+
333355
- 서버 상태가 없어서 손쉬운 스케일링
334356
- 로드 밸런싱 용이
335357

336358
### 3. 모바일 친화적
359+
337360
- Authorization header 방식은 모바일에 최적
338361
- cookie 기반 인증보다 단순
339362

340363
### 4. 보안 강화
364+
341365
- JWE 암호화로 데이터 노출 방지
342366
- 짧은 access token 만료 시간
343367

0 commit comments

Comments
 (0)