diff --git a/ideas/auth_system_analysis.md b/ideas/auth_system_analysis.md index 6bf58fe..a2344af 100644 --- a/ideas/auth_system_analysis.md +++ b/ideas/auth_system_analysis.md @@ -115,6 +115,33 @@ collection_name = f"{robing_id}_{user_id}_episodic" - user_id vs username vs email 혼용 - JWT의 'sub'가 username인지 user_id인지 불명확 +### 7. Slack 통합과 인증 체계 불일치 🔗 +- **Slack OAuth와 Google OAuth 별개 운영** + - Slack 워크스페이스 인증 (봇 토큰) + - Google 개인 인증 (사용자 토큰) + - 두 시스템 간 연결 고리 불명확 + +- **Slack 사용자 매핑 문제** + - slack_user_id (U0925SXQFDK) ↔ user_id (UUID) 매핑 필요 + - 현재 하드코딩된 매핑 3개만 존재 + - 신규 Slack 사용자 자동 연결 방법 없음 + +- **복잡한 관계 구조** + ``` + Slack Workspace ← SlackWorkspaces 테이블 + ↓ + Slack User ID ← slack_user_mapping 테이블 + ↓ + User (UUID) ← users 테이블 + ↓ + Google Account (OAuth) + ``` + +- **권한 충돌 가능성** + - Slack 봇 권한: chat:write, channels:read 등 + - Google 권한: gmail.modify, calendar.events 등 + - 같은 사용자가 두 가지 인증 경로 보유 + ## 결정 필요 사항 ### 1. 주요 식별자 선택 @@ -190,6 +217,33 @@ X-Username: happybell80 // 명확한 이름 - DB에 권한 레벨 저장: `oauth_scopes` 필드 추가 - Frontend에서 권한 상태 표시 및 추가 연결 버튼 제공 +### 7. Slack과 Google 인증 통합 전략 +``` +옵션 A: 통합 인증 (하나의 주 계정) +- Google 로그인을 주 인증으로 사용 +- Slack은 추가 연결 (선택적) +- 장점: 단순한 인증 흐름 +- 단점: Slack 전용 사용자 지원 어려움 + +옵션 B: 독립 인증 (현재) +- Google과 Slack 각각 독립 인증 +- 수동 매핑 필요 +- 장점: 유연성 +- 단점: 복잡한 관리 + +옵션 C: 자동 연결 (추천) ✅ +- 이메일 기반 자동 매칭 +- Slack 이메일 == Google 이메일 시 자동 연결 +- 불일치 시 수동 연결 옵션 제공 +``` + +**구현 방안:** +- Slack 사용자가 처음 메시지 전송 시: + 1. Slack API로 이메일 조회 + 2. users 테이블에서 같은 이메일 검색 + 3. 매칭되면 자동으로 slack_user_mapping 생성 + 4. 없으면 임시 계정 생성 후 연결 대기 + ## 즉시 수정 필요 (Critical) ### 1. Frontend (robing-api.ts) @@ -240,6 +294,12 @@ collection_name = f"{robing_id}_{username}_episodic" 3. DB에 사용자별 권한 상태 저장 4. Frontend에 권한 관리 UI 추가 +### Phase 5: Slack-Google 인증 통합 (2주) +1. 이메일 기반 자동 매칭 로직 구현 +2. Slack 사용자 첫 메시지 시 자동 계정 생성 +3. 수동 연결 UI 개발 +4. 통합 대시보드 구현 + ## 참고 사항 - **JWT Secret**: 모든 서비스가 같은 키 공유 필요