diff --git a/troubleshooting/250917_네이버웍스_passport_작업.md b/troubleshooting/250917_네이버웍스_passport_작업.md new file mode 100644 index 0000000..abe24c7 --- /dev/null +++ b/troubleshooting/250917_네이버웍스_passport_작업.md @@ -0,0 +1,157 @@ +# NAVER WORKS Passport 구현 작업 (2025-09-17) + +## 작업 개요 +NAVER WORKS OAuth 2.0 기반 Passport 시스템 구현 완료. Gmail/Slack 패턴을 참조하여 NAVER WORKS API 접근 권한 관리 시스템 구축. + +## 구현 완료 사항 + +### 1. 파일 생성 +**위치**: `/home/admin/auth-server/app/providers/naverworks_passport.py` + +**구현 기능**: +- OAuth 2.0 인증 플로우 +- OIDC userinfo 조회 +- PostgreSQL 토큰 저장/관리 +- Refresh Token Rotation 대비 + +**주요 엔드포인트**: +- `GET /auth/naverworks/passport/install?user_id={user_id}&return_url={url}` + - OAuth 인증 시작 + - state에 user_id 포함하여 CSRF 방지 + +- `GET /auth/naverworks/passport/callback?code={code}&state={state}` + - Authorization code → Access token 교환 + - OIDC userinfo 조회 + - DB에 토큰 정보 저장 (UPSERT) + +- `GET /auth/naverworks/passport/status?user_id={user_id}` + - 패스포트 보유 여부 확인 + - 토큰 만료 상태 체크 + - capabilities 반환 + +### 2. 라우터 등록 +**파일**: `/home/admin/auth-server/app/main.py` +```python +from app.providers import naverworks_passport +app.include_router(naverworks_passport.router, prefix="/auth/naverworks/passport", tags=["NAVER WORKS Passport"]) +``` + +### 3. DB 스키마 +**테이블명**: `naverworks_tokens` + +| 컬럼명 | 타입 | 설명 | +|--------|------|------| +| user_id | UUID (PK) | 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 | +| 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 | 수정 시각 | + +### 4. 환경변수 설정 + +#### 필수 환경변수 (.env 파일) +```bash +# NAVER WORKS OAuth 설정 (이미 존재) +NAVER_WORKS_CLIENT_ID= +NAVER_WORKS_CLIENT_SECRET= +NAVER_WORKS_TENANT_ID=<조직 도메인 ID> +NAVER_WORKS_SERVICE_ACCOUNT= +NAVER_WORKS_PRIVATE_KEY_BASE64= + +# Passport Redirect URL (추가됨) +NAVER_WORKS_PASSPORT_REDIRECT_URI=https://auth.ro-being.com/auth/naverworks/passport/callback +``` + +## ⚠️ 확인 필요 사항 + +### 1. NAVER WORKS Developer Console 설정 확인 +**작업 필요**: NAVER WORKS Developer Console 접속하여 실제 Redirect URL 확인 +- 경로: Developers > Apps > Ro-being > OAuth > Redirect URL +- 현재 가정: `https://auth.ro-being.com/auth/naverworks/passport/callback` +- 실제 설정값과 다를 경우 `.env` 파일 수정 필요 + +### 2. Private Key 처리 +- 현재 Base64 인코딩된 형태로 환경변수에 저장 +- Git에는 절대 포함하지 않도록 주의 +- 보안을 위해 Vault 등 암호화된 저장소 사용 권장 + +## 테스트 방법 + +### 1. 상태 확인 +```bash +# Passport 상태 확인 +curl "http://localhost:9000/auth/naverworks/passport/status?user_id=heejae" +``` + +### 2. OAuth 플로우 테스트 +```bash +# 1. 브라우저에서 OAuth 시작 +https://auth.ro-being.com/auth/naverworks/passport/install?user_id={user_id} + +# 2. NAVER WORKS 로그인 및 권한 승인 + +# 3. 콜백 처리 후 리다이렉트 +# return_url 또는 기본 페이지로 이동 +``` + +### 3. Docker 로그 확인 +```bash +docker logs auth-server --tail 50 | grep naverworks +``` + +## 다음 단계 + +### Phase 2: Skill 서비스 구현 +1. **skill-naverworks 서비스 생성** (포트 8511) + - 캘린더 API 연동 + - 메일 발송 기능 + - 주소록 관리 + +2. **토큰 자동 갱신 로직** + - Refresh Token Rotation 처리 + - 만료 전 자동 갱신 + +3. **Frontend 통합** + - 로그인 버튼 추가 + - Skills Panel에 NAVER WORKS 아이템 추가 + +### Phase 3: Service Account 활용 +1. **조직 전체 데이터 접근** + - JWT 기반 Service Account 인증 + - 배치 작업용 토큰 관리 + +2. **주기적 동기화** + - 조직 캘린더 동기화 + - 사용자 정보 업데이트 + +## 주의사항 + +1. **Refresh Token Rotation** + - NAVER WORKS는 refresh_token 사용 시 새로운 토큰 발급 + - 기존 refresh_token은 즉시 무효화 + - DB 동기화 매우 중요 + +2. **스코프 관리** + - 현재 설정: openid, profile, email, calendar, contact, mail, task, user, file + - 실제 사용 시 최소 권한 원칙 적용 권장 + +3. **에러 처리** + - OAuth 에러 코드 적절히 처리 + - 토큰 만료 시 자동 갱신 또는 재인증 유도 + +## 참고 자료 +- NAVER WORKS Developers: https://developers.worksmobile.com +- OAuth 2.0 가이드: https://developers.worksmobile.com/kr/docs/auth +- API 레퍼런스: https://developers.worksmobile.com/kr/reference + +## 작업자 +- 작성일: 2025-09-17 +- 작성자: Claude (51123 서버 관리자) +- 검토 필요: NAVER WORKS Developer Console Redirect URL 확인 \ No newline at end of file