docs: NAVER WORKS 토큰 갱신 현황 업데이트 - 확인된 사실만 기록, 추측 제거

This commit is contained in:
happybell80 2025-09-19 00:32:26 +09:00
parent ba71712648
commit d30b415f3b
3 changed files with 45 additions and 32 deletions

View File

@ -165,21 +165,21 @@ POST /v2/mail-summary
- **수명**: Access Token 1시간, Refresh Token 90일
- **위험**: DB 저장 실패 시 영구 토큰 손실, 재인증 필요
### 8.2 구현 위치 결정
**auth-server에서 중앙 관리 (정답)**
```
/home/admin/auth-server/app/providers/
└── naverworks_refresh.py # 토큰 갱신 전용 모듈
```
### 8.2 구현 위치 (결정 완료)
**auth-server에서 중앙 관리**
- 위치: `/home/admin/auth-server/app/providers/naverworks_refresh.py` (생성 필요)
- 포트: 9000
- 엔드포인트: **결정 필요** - `/auth/naverworks/refresh` 또는 `/api/auth/naverworks/refresh`
**역할 분리**:
- auth-server: 모든 토큰 발급/갱신/저장 (포트 9000)
- rb8001/skill-email: API 호출만, 401 시 auth-server에 갱신 요청
- 엔드포인트: `POST /auth/naverworks/refresh`
### 8.3 현재 인프라 상태 (확인 완료)
- Redis 컨테이너: 실행 중 (6f083213a8b1)
- auth-server 컨테이너: 실행 중 (dba7eb03216a)
- 현재 토큰 상태: Access Token 만료 (4시간 경과), Refresh Token 보유
- DB 필드: token_data (JSONB), expires_at, expiry 존재 (**확인 필요**: 어느 필드 사용?)
### 8.3 동시성 제어
- Redis Lock 또는 DB 트랜잭션으로 동시 갱신 방지
- 첫 번째 갱신만 성공, 나머지는 대기 또는 실패 처리
### 8.4 동시성 제어
- **확인 필요**: Redis Lock 구현 여부
- **결정 필요**: DB 트랜잭션 vs Redis Lock
---

View File

@ -45,38 +45,46 @@ app.include_router(naverworks_passport.router, prefix="/auth/naverworks/passport
- 로그인 시 `is_equipped=false`로 설정 (Passport 설치 시 `true`)
- 토큰 저장 실패해도 로그인은 계속 진행
### 3. DB 스키마
### 3. DB 스키마 (실제 확인)
**테이블명**: `naverworks_token`
| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| user_id | UUID (PK) | user 테이블 FK |
| id | UUID (PK) | gen_random_uuid() |
| user_id | UUID | user 테이블 FK |
| username | VARCHAR(255) | 빠른 조회용 |
| domain_id | VARCHAR(255) | NAVER WORKS 도메인 ID |
| account_id | VARCHAR(255) | NAVER WORKS 계정 ID |
| token_data | JSONB | access_token, refresh_token, token_type |
| access_token | TEXT | **확인 필요**: 사용 여부 |
| refresh_token | TEXT | **확인 필요**: 사용 여부 |
| token_type | VARCHAR(50) | 기본값: 'Bearer' |
| token_data | JSONB | access_token, refresh_token 저장 |
| oauth_config | JSONB | client_id, client_secret |
| scopes | JSONB | 권한 목록 |
| metadata | JSONB | email, name, org_name 등 |
| expiry | TIMESTAMP | access_token 만료 시간 |
| is_equipped | BOOLEAN | 활성화 상태 |
| created_at | TIMESTAMP | 생성 시각 |
| updated_at | TIMESTAMP | 수정 시각 |
| expires_at | TIMESTAMP | **확인 필요**: expiry와 중복? |
| expiry | TIMESTAMP | **확인 필요**: expires_at와 중복? |
| service_account | VARCHAR(255) | Service Account ID |
| is_equipped | BOOLEAN | 기본값: false |
| created_at | TIMESTAMPTZ | 생성 시각 |
| updated_at | TIMESTAMPTZ | 수정 시각 |
**인덱스**:
- PRIMARY KEY: id
- idx_naverworks_token_user_id
- idx_naverworks_token_expires_at
### 4. 환경변수 설정
#### 필수 환경변수 (.env 파일)
```bash
# NAVER WORKS OAuth 설정 (이미 존재)
NAVER_WORKS_CLIENT_ID=<Developer Console에서 확인>
NAVER_WORKS_CLIENT_SECRET=<Developer Console에서 확인>
NAVER_WORKS_TENANT_ID=<조직 도메인 ID>
NAVER_WORKS_SERVICE_ACCOUNT=<Service Account ID>
NAVER_WORKS_PRIVATE_KEY_BASE64=<Base64 인코딩된 Private Key>
# Passport Redirect URL (추가됨)
NAVER_WORKS_PASSPORT_REDIRECT_URI=https://auth.ro-being.com/auth/naverworks/passport/callback
```
#### 환경변수 (확인 완료)
- NAVER_WORKS_CLIENT_ID
- NAVER_WORKS_CLIENT_SECRET
- NAVER_WORKS_REDIRECT_URI
- NAVER_WORKS_SERVICE_ACCOUNT
- NAVER_WORKS_TENANT_ID
- NAVER_WORKS_PRIVATE_KEY_BASE64
- NAVER_WORKS_SCOPES
- NAVER_WORKS_PASSPORT_REDIRECT_URI
## ⚠️ 확인 필요 사항

View File

@ -54,6 +54,11 @@
- `/auth/naverworks/passport/callback` - Passport 콜백
- `/auth/naverworks/passport/status` - Passport 상태 확인
**Phase 3 - 토큰 갱신 엔드포인트** (구현 필요):
- **결정 필요**: `/auth/naverworks/refresh` 또는 `/api/auth/naverworks/refresh`
- 파일 생성 필요: `naverworks_refresh.py`
- Refresh Token Rotation 처리 필요
**외부 OAuth URL**:
- **Authorization**: `https://auth.worksmobile.com/oauth2/v2.0/authorize`
- **Token**: `https://auth.worksmobile.com/oauth2/v2.0/token`