diff --git a/ideas/auth_system_analysis.md b/ideas/auth_system_analysis.md index 08a2cee..6bf58fe 100644 --- a/ideas/auth_system_analysis.md +++ b/ideas/auth_system_analysis.md @@ -106,7 +106,12 @@ collection_name = f"{robing_id}_{user_id}_episodic" - 새 사용자 추가 시 코드 수정 필요 - 확장성 없음 -### 5. 변수명 불일치 혼란 🔄 +### 5. OAuth 권한 과다 요청 🔐 +- 회원가입/로그인 시 Gmail 읽기/쓰기 권한(`gmail.modify`)까지 요청 +- 복잡한 동의 과정으로 사용자 이탈 가능성 높음 +- 이메일 기능 미사용자에게도 과도한 권한 요청 + +### 6. 변수명 불일치 혼란 🔄 - user_id vs username vs email 혼용 - JWT의 'sub'가 username인지 user_id인지 불명확 @@ -168,6 +173,23 @@ X-Username: happybell80 // 명확한 이름 대안: 'jwt_token', 'access_token', 'robing_token' ``` +### 6. OAuth 권한 분리 전략 +```python +# 옵션 A: 단계별 권한 요청 (추천) ✅ +기본 로그인: openid, userinfo.email, userinfo.profile +이메일 스킬: gmail.modify (별도 연결) +캘린더 스킬: calendar.events (별도 연결) + +# 옵션 B: 일괄 권한 요청 (현재) +모든 권한을 한 번에 요청 (사용자 이탈 높음) +``` + +**구현 방안:** +- `/auth/gmail/login` - 기본 프로필 권한만 (간단한 로그인) +- `/auth/gmail/connect-email` - Gmail 권한 추가 (이메일 아이템 사용 시) +- DB에 권한 레벨 저장: `oauth_scopes` 필드 추가 +- Frontend에서 권한 상태 표시 및 추가 연결 버튼 제공 + ## 즉시 수정 필요 (Critical) ### 1. Frontend (robing-api.ts) @@ -212,6 +234,12 @@ collection_name = f"{robing_id}_{username}_episodic" 2. 토큰 갱신 로직 구현 3. 권한 체계 구현 +### Phase 4: OAuth 권한 분리 (1주) +1. 기본 로그인용 엔드포인트 구현 (최소 권한) +2. 스킬별 추가 권한 연결 엔드포인트 구현 +3. DB에 사용자별 권한 상태 저장 +4. Frontend에 권한 관리 UI 추가 + ## 참고 사항 - **JWT Secret**: 모든 서비스가 같은 키 공유 필요