DOCS/troubleshooting/250828_slack_auth_integration_completed.md
happybell80 dc7d2a5f30 보안: JWT_SECRET_KEY 노출 제거 및 인증 상태 업데이트
- 250827_JWT_인증_구현_COMPLETED.md: JWT_SECRET_KEY 값 [REDACTED]로 변경
- 250828_slack_auth_integration_completed.md: 보안 키 노출 제거
- 250827_JWT_인증_보안_취약점_CRITICAL.md: 해결 상태 업데이트
  - rb8001, skill-email JWT 인증 구현 완료
  - rb10508_micro는 폐기 예정으로 표시
  - Gateway /api/stats JWT 검증 추가 완료

보안 개선사항:
- 프로덕션 키 노출 제거
- 대부분의 취약점 해결됨 표시
2025-08-28 18:38:21 +09:00

3.8 KiB

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 키 설정 (즉시)

# 51124 서버에서 실행
echo "JWT_SECRET_KEY=[REDACTED]" >> \
  /home/admin/ivada_project/skill_email/.env
docker restart skill-email

단계 2: rb8001 UUID5 → API 매핑 전환

# /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: 서비스 간 인증 추가

# 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 매핑 테스트

# 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 플로우 구현