diff --git a/plans/250828_slack_oauth_itemization_plan.md b/plans/250828_slack_oauth_itemization_plan.md new file mode 100644 index 0000000..49170f9 --- /dev/null +++ b/plans/250828_slack_oauth_itemization_plan.md @@ -0,0 +1,109 @@ +# Slack 인증 통합 개선 계획 + +## 작성일: 2025-08-28 +## 작성자: 51123 서버 관리자 +## 상태: 부분 구현 - rb8001 개선 필요 +## 목표: Slack 인증을 51123 매핑 API 기반으로 통합 + +--- + +## 1. 현재 상황 분석 + +### 51123 서버 (auth-server) ✅ +- **매핑 API 구현**: `/api/slack/mapping/{slack_user_id}` (포트 9000) +- **데이터 존재**: slack_user_mapping 3건 (U091UNVE41M, U0925SXQFDK, U092F7FQ55L) +- **반환값**: user_id(UUID), username, email, robeing_id + +### 51124 서버 (rb8001) ⚠️ +- **Slack 서명 검증**: HMAC-SHA256 구현됨 ✅ +- **UUID 변환**: UUID5 사용 중 (DNS namespace) - 변경 필요 +- **서비스 통신**: skill-email에 인증 헤더 없이 body로만 전달 +- **파일 위치**: `/rb8001/app/router/slack_handler.py` + +--- + +## 2. 기존 데이터베이스 구조 (이미 구현됨) + +### slack_workspaces 테이블 (51123) +- workspace별 봇 토큰 관리 +- team_id 기준 unique 제약 +- bot_token, bot_user_id, scopes 저장 + +### slack_user_mapping 테이블 (51123) +- Slack user_id → UUID 매핑 +- workspace별 사용자 관리 +- 실제 데이터: U091UNVE41M → b6ea2ee0..., U0925SXQFDK → 1e16e9d5... + +--- + +## 3. 주요 문제점 + +### rb8001 ID 처리 개선 필요 +| 현재 방식 | 개선 방안 | +|----------|----------| +| UUID5(DNS namespace, slack_id) | 51123 매핑 API 호출 | +| 로컬 변환으로 UUID 생성 | 실제 DB 매핑 사용 | +| skill-email에 Slack ID 전달 | UUID 전달로 통일 | + +### 서비스 간 통신 보안 +- **skill-email JWT 키**: 기본값 사용 중 (your-jwt-secret-key) +- **인증 헤더 없음**: rb8001 → skill-email 통신 시 +- **Slack OAuth**: Frontend → auth-server 경유 필요 (직접 OAuth 불가) + +--- + +## 4. 개선 방안 + +### 단계 1: skill-email JWT 키 설정 (즉시) +```bash +# 51124 서버에서 실행 +echo "JWT_SECRET_KEY=9cc562b6296b87b02dd89045a2e7e11c249713a59a5ac0160d852121f1289664" >> \ + /home/admin/ivada_project/skill_email/.env +docker restart skill-email +``` + +### 단계 2: rb8001 UUID5 → API 매핑 전환 +```python +# /rb8001/app/skills/email_integration.py 수정 +# 기존: user_uuid = str(uuid.uuid5(namespace, user_id)) +# 변경: +async def get_uuid_from_slack(slack_id: str): + response = await httpx.get( + f"http://192.168.219.45:9000/api/slack/mapping/{slack_id}" + ) + return response.json()["user_id"] +``` + +### 단계 3: 서비스 간 인증 추가 +```python +# rb8001 → skill-email 호출 시 +headers = {"Authorization": f"Bearer {internal_token}"} +await http_client.post(url, json=data, headers=headers) +``` + +--- + +## 5. 구현 우선순위 + +| 우선순위 | 작업 | 위치 | 담당 | +|---------|------|------|------| +| 1 | skill-email JWT_SECRET_KEY 설정 | 51124 서버 | 51124 관리자 | +| 2 | UUID5 → 매핑 API 전환 | rb8001 | 로컬 개발자 | +| 3 | 서비스 간 인증 헤더 추가 | rb8001, skill-email | 로컬 개발자 | +| 4 | Slack OAuth auth-server 경유 | auth-server, frontend | 로컬 개발자 | + +--- + +## 6. 검증 방법 + +### API 매핑 테스트 +```bash +# 51123에서 Slack → UUID 매핑 확인 +curl http://192.168.219.45:9000/api/slack/mapping/U0925SXQFDK +# 응답: {"user_id": "1e16e9d5-59f3-54da-a661-8abeabff4230", ...} +``` + +### 개선 효과 +- **데이터 일관성**: UUID5 임시 변환 → 실제 DB 매핑 사용 +- **보안 강화**: 모든 서비스 JWT 키 통일 +- **유지보수성**: 51123 중앙 관리로 매핑 데이터 일원화 \ No newline at end of file