diff --git a/ideas/250916_네이버웍스_캘린더_API_연동_가이드.md b/ideas/250916_네이버웍스_캘린더_API_연동_가이드.md index 160330f..e43d77e 100644 --- a/ideas/250916_네이버웍스_캘린더_API_연동_가이드.md +++ b/ideas/250916_네이버웍스_캘린더_API_연동_가이드.md @@ -153,17 +153,20 @@ #### 수정 필요 - **`auth-server/app/main.py`**: naverworks 라우터 등록 (`prefix="/auth/naverworks"`) - **`auth-server/.env`**: NAVERWORKS_CLIENT_ID, SECRET, REDIRECT_URI 추가 -- **`nginx-deploy`**: `/auth/naverworks`, `/api/naverworks` 라우팅 설정 +- **`nginx-infra`**: `/auth/naverworks`, `/api/naverworks` 라우팅 설정 #### DB 스키마 -- **기존 users 테이블 활용**: oauth_provider="naverworks", oauth_id={NAVER WORKS userId} +- **기존 user 테이블 활용** (SQLAlchemy: `__tablename__ = "user"`): + - oauth_provider="naverworks" + - oauth_id={NAVER WORKS userId} - **신규 테이블**: `team.naverworks_token` (Service Account 토큰 저장용) ### 5.2 구현 플로우 (Slack 패턴 참조) #### OAuth 로그인 엔드포인트 - **GET /auth/naverworks/login/**: State 생성 → Redis 저장 → OAuth 리다이렉트 -- **GET|POST /auth/naverworks/callback**: State 검증 → Token 교환 → Userinfo 조회 → User 매핑 → JWT 발급 +- **GET /auth/naverworks/callback**: State 검증 → Token 교환 → Userinfo 조회 → User 매핑 → JWT 발급 + - 주의: 표준 OAuth 2.0은 GET 콜백 사용 (Slack OIDC의 POST form_post와 다름) #### Redis Keys - `oauth:state:{state}`: CSRF 방지용 state 저장 (TTL 300s) @@ -180,14 +183,14 @@ #### 결정사항 (확정) - **Redirect URL 도메인**: `auth.ro-being.com` 사용 (Gmail/Slack과 통일) - **Private Key 처리**: - - 2025-09-17: Git 임시 commit 후 서버 전송 완료 - - 서버 51123: Base64로 .env 파일에 저장됨 - - Git에서 삭제 완료 (commit a4a2b9c) + - 2025-09-17: Git 임시 commit 후 서버 전송 + - 서버 저장: Base64 인코딩하여 .env의 NAVERWORKS_PRIVATE_KEY_BASE64에 저장 + - Git에서 삭제 완료 (보안상 Git 저장 금지) - **NAVER WORKS 토큰 테이블**: `naverworks_token` (team 스키마 아래, 단수형) #### 확인필요 - **OIDC userinfo 응답 형식**: sub, userId 등 정확한 필드명 -- **Service Account JWT 서명**: 알고리즘 (RS256 등) +- **Service Account JWT 서명**: RS256 알고리즘 (RSA 2048 bits) 사용 확인됨 - **Rate Limit**: API 호출 제한 및 쿼터 - **Private Key 교체 시**: 기존 토큰 유효성 유지 여부