- plans → troubleshooting 이동 (프로젝트 완료) - 파일명 변경: 250828_slack_auth_integration_completed.md
121 lines
3.8 KiB
Markdown
121 lines
3.8 KiB
Markdown
# Slack 인증 통합 개선 - 완료
|
|
|
|
## 작성일: 2025-08-28
|
|
## 작성자: 51123 서버 관리자
|
|
## 상태: 완료 - 3단계 모두 완료 (2025-08-28 20:30)
|
|
## 목표: 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 사용 중~~ → 51123 매핑 API 사용 ✅ (2025-08-28 완료)
|
|
- **서비스 통신**: skill-email에 인증 헤더 없이 body로만 전달 ⚠️
|
|
- **skill-email JWT**: ~~기본값~~ → 정상 설정 완료 ✅ (2025-08-28)
|
|
|
|
---
|
|
|
|
## 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 키**: ~~기본값~~ → 정상 설정 완료 ✅ (2025-08-28)
|
|
- **인증 헤더**: ~~없음~~ → Bearer 토큰 구현 완료 ✅ (2025-08-28)
|
|
- **Slack OAuth**: Frontend → auth-server 경유 필요 (향후 구현)
|
|
|
|
---
|
|
|
|
## 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 서버~~ | ✅ 완료 |
|
|
| 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", ...}
|
|
```
|
|
|
|
### 완료된 개선 사항 (2025-08-28 20:30)
|
|
|
|
#### 1단계: 환경설정 ✅
|
|
- skill-email JWT_SECRET_KEY 설정 완료
|
|
- rb8001, skill-email INTERNAL_API_KEY 설정 완료
|
|
|
|
#### 2단계: ID 체계 통합 ✅
|
|
- rb8001 UUID5 → 51123 매핑 API 전환 완료
|
|
- 실제 DB 매핑으로 데이터 일관성 확보
|
|
|
|
#### 3단계: 서비스 간 인증 ✅
|
|
- rb8001 → skill-email Bearer 토큰 인증 구현
|
|
- 401 Unauthorized 검증 로직 추가
|
|
|
|
### 향후 작업
|
|
- Frontend → auth-server Slack OAuth 플로우 구현 |