diff --git a/troubleshooting/250828_UUID_통합_및_사용자_격리_계획.md b/troubleshooting/250828_UUID_통합_및_사용자_격리_계획.md index 42e434c..d2bf2ec 100644 --- a/troubleshooting/250828_UUID_통합_및_사용자_격리_계획.md +++ b/troubleshooting/250828_UUID_통합_및_사용자_격리_계획.md @@ -7,17 +7,25 @@ --- -## 1. 현재 상황 +## 1. 현재 상황 (2025-08-28 확인) -### ID 체계 혼재 -- **Frontend**: Google OAuth → UUID4 (auth-server 생성) -- **Slack**: Slack User ID (U091XXX...) -- **DB**: UUID, username, slack_id 혼용 +### ID 체계 현황 +- **Frontend**: JWT sub에 UUID 사용 ✅ +- **Gateway**: UUID로 인증 ✅ +- **slack_user_mapping**: Slack ID → UUID 매핑 활성화 ✅ +- **rb8001**: Slack ID 그대로 사용 (String) ❌ + +### 실제 데이터 +``` +happybell80: U0925SXQFDK → 1e16e9d5-59f3-54da-a661-8abeabff4230 +0914eagle: U091UNVE41M → b6ea2ee0-a15a-5cf4-93a9-a9ca20d4c4a0 +cdctfm: U092F7FQ55L → 69ae4ea9-a15f-5110-9f5d-6568e380fcfb +``` ### 문제점 -- 같은 사용자가 서비스마다 다른 ID -- rb8001 JWT 검증 미구현 (보안 취약) -- ChromaDB 사용자 격리 없음 +- rb8001 JWT 미구현 (기본 시크릿 키) +- rb8001이 Slack ID를 UUID로 변환 안 함 +- ChromaDB 컬렉션 비어있음 `[]` --- @@ -46,14 +54,14 @@ workspace (로빙 1개) ## 3. 구현 계획 ### Phase 1: 보안 (긴급) -- [ ] rb8001 JWT 검증 구현 -- [ ] X-User-Id 헤더 제거 -- [ ] Bearer 토큰 필수화 +- [ ] rb8001 JWT_SECRET_KEY 설정 (Gateway와 동일) +- [ ] rb8001 Bearer 토큰 검증 구현 +- [ ] X-User-Id 헤더 의존 제거 -### Phase 2: ID 통합 -- [ ] slack_user_mapping 활성화 -- [ ] UUID5 → DB 조회 전환 -- [ ] gmail_tokens slack_user_id 제거 +### Phase 2: ID 통합 +- [x] slack_user_mapping 테이블 활성화 (확인됨) +- [ ] rb8001에서 Slack ID → UUID 변환 +- [ ] robeing-monitor UUID5 제거 ### Phase 3: 사용자 격리 - [ ] ChromaDB 사용자별 컬렉션 @@ -64,29 +72,40 @@ workspace (로빙 1개) ## 4. 핵심 변경사항 -### rb8001 (51124 서버) +### rb8001 (51124 서버) - 로컬 개발자 작업 ```python -# 추가 필요: app/dependencies/auth.py -async def get_current_user(authorization: str = Header()): - # JWT 검증 - # UUID 추출 - return user_uuid +# 1. JWT 검증 (/app/auth.py 수정) +JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY") # Gateway와 동일 + +# 2. Slack 이벤트 처리 시 UUID 변환 +slack_id = event['user'] # U0925SXQFDK +user_uuid = await get_uuid_from_slack(slack_id) # slack_user_mapping 조회 ``` -### robeing-monitor (51124 서버) -- UUID5 제거 → slack_user_mapping API 사용 +### slack_user_mapping API (51123 서버) +```python +@app.get("/api/slack/{slack_id}/uuid") +async def get_uuid(slack_id: str): + # DB 조회하여 UUID 반환 +``` ### Gateway (51123 서버) - 이미 UUID 사용 중 ✅ --- -## 5. 테스트 시나리오 +## 5. 검증된 사실 -1. happybell80이 Frontend 로그인 → UUID 확인 -2. 같은 사용자 Slack DM → 같은 UUID 매핑 -3. 다른 사용자와 대화 격리 확인 -4. 워크스페이스 로빙 공유 확인 +### 작동 중 +- auth-server: JWT sub에 UUID 사용 +- Gateway: JWT 검증 및 UUID 추출 +- slack_user_mapping: 3명 데이터 확인 +- Frontend: localStorage에 UUID 저장 + +### 미구현 +- rb8001: JWT 검증 없음 (app/auth.py 있지만 미사용) +- rb8001: Slack ID를 UUID로 변환 안 함 +- ChromaDB: 컬렉션 없음 ---