docs: skill-email OAuth 토큰 자동 갱신 해결 완료 업데이트
- 2025-08-25 commit 2d175c1 구현 내용 반영 - 2025-08-27 51124 서버 배포 완료 - Google OAuth 라이브러리 직접 사용하여 해결 - auth-server API 연동 없이 독립적 처리
This commit is contained in:
parent
5d601d83b1
commit
d7f6112779
@ -99,12 +99,13 @@ curl -X POST http://localhost:8001/api/memory/search \
|
||||
|
||||
---
|
||||
|
||||
## 문제 2: skill-email OAuth 토큰 자동 갱신 부재
|
||||
## 문제 2: ~~skill-email OAuth 토큰 자동 갱신 부재~~ ✅ 해결완료 (2025-08-27)
|
||||
|
||||
### 문제 설명
|
||||
skill-email 서비스의 Gmail OAuth 토큰 자동 갱신 기능 미구현 상태
|
||||
~~skill-email 서비스의 Gmail OAuth 토큰 자동 갱신 기능 미구현 상태~~
|
||||
→ **2025-08-27 배포 완료**: OAuth 토큰 자동 갱신 구현 및 배포 완료
|
||||
|
||||
### 현상
|
||||
### 현상 (해결 전)
|
||||
1. **토큰 갱신 미구현**
|
||||
- `/skill_email/services/gmail_service.py:62` TODO 주석 확인
|
||||
- refresh_credentials 함수가 실제 갱신 없이 그대로 반환
|
||||
@ -114,55 +115,49 @@ skill-email 서비스의 Gmail OAuth 토큰 자동 갱신 기능 미구현 상
|
||||
- 파일 시스템에서 토큰 읽기만 수행 (`/auth-server/tokens`)
|
||||
- 토큰 만료 체크 로직 없음
|
||||
|
||||
### 원인 분석
|
||||
### 원인 분석 (해결됨)
|
||||
|
||||
#### 현재 상태 (2025-08-27 확인)
|
||||
#### ~~현재~~ 해결 전 상태 (2025-08-27 이전)
|
||||
1. **auth-server (51123)**: ✅ 토큰 갱신 API 구현 완료
|
||||
- `/api/gmail/refresh/{user_id}` - 토큰 자동 갱신
|
||||
- `/api/gmail/check/{user_id}` - 토큰 상태 확인
|
||||
- 2025-08-23 문서에서 구현 확인됨
|
||||
|
||||
2. **skill-email (51124)**: ❌ auth-server API 미연동
|
||||
```python
|
||||
# /skill_email/services/gmail_service.py:60-63
|
||||
def refresh_credentials(self, user_id: str, creds: Credentials) -> Result[Credentials, EmailError]:
|
||||
"""토큰 갱신 (추후 구현)"""
|
||||
# TODO: refresh token으로 새 access token 받기
|
||||
return Ok(creds)
|
||||
```
|
||||
2. **skill-email (51124)**: ~~❌ auth-server API 미연동~~ → ✅ 자체 갱신 구현 완료
|
||||
- 2025-08-25 commit `2d175c1`: "이메일 보내기 전 refresh" 구현
|
||||
- 2025-08-27 배포 완료
|
||||
|
||||
#### 현재 상태
|
||||
- skill-email: 파일 기반 토큰 읽기 (TOKEN_BASE 환경변수)
|
||||
- auth-server API 호출 코드 미구현
|
||||
- 토큰 만료 체크 로직 필요
|
||||
#### 해결 방법 (구현됨)
|
||||
- Google OAuth 라이브러리(`google.auth`) 직접 사용
|
||||
- `creds.refresh(Request())` 호출로 자동 갱신
|
||||
- 갱신된 토큰은 DB에 자동 저장
|
||||
- auth-server API 연동 없이 독립적으로 처리
|
||||
|
||||
### 해결 방안
|
||||
### ✅ 구현 완료 (2025-08-27)
|
||||
|
||||
#### 1. auth-server의 기존 API 활용 (51124 서버 작업 필요)
|
||||
#### 구현된 솔루션 (`/skill_email/services/gmail_service.py:95-108`)
|
||||
```python
|
||||
# skill-email에서 호출해야 할 auth-server API
|
||||
async def refresh_token_via_auth_server(self, user_id: str):
|
||||
"""auth-server의 기존 갱신 API 호출"""
|
||||
response = await httpx.post(
|
||||
f"http://192.168.219.45:3000/api/gmail/refresh/{user_id}"
|
||||
)
|
||||
return response.json()
|
||||
# 토큰이 만료되었거나 곧 만료될 경우 자동 refresh
|
||||
if creds and creds.expired and creds.refresh_token:
|
||||
logger.info(f"Refreshing expired token for user: {user_id}")
|
||||
from google.auth.transport.requests import Request
|
||||
creds.refresh(Request()) # Google OAuth 라이브러리가 자동 갱신
|
||||
|
||||
# 갱신된 토큰 저장
|
||||
if hasattr(self.creds_provider, 'save_credentials'):
|
||||
self.creds_provider.save_credentials(user_id, creds)
|
||||
logger.info(f"Refreshed token saved for user: {user_id}")
|
||||
```
|
||||
|
||||
#### 2. 토큰 만료 체크 및 자동 갱신
|
||||
```python
|
||||
if creds.expired and creds.refresh_token:
|
||||
creds = await self.refresh_token_via_auth_server(user_id, creds.refresh_token)
|
||||
```
|
||||
|
||||
#### 3. 구현 위치
|
||||
- `/skill_email/services/gmail_service.py`의 refresh_credentials 함수
|
||||
- `_get_gmail_service` 함수에서 토큰 체크 로직 추가
|
||||
#### 추가 구현 사항
|
||||
- 401 에러 발생 시 토큰 재갱신 후 재시도 로직 추가
|
||||
- DBCredentialsProvider에 `save_credentials()` 메서드 구현 완료
|
||||
- 토큰 갱신 실패 시에도 서비스 계속 진행 (graceful degradation)
|
||||
|
||||
### 영향 범위
|
||||
- **영향받는 서비스**: skill-email
|
||||
- **관련 서비스**: auth-server (51123 서버)
|
||||
- **긴급도**: MEDIUM (토큰 만료 시 서비스 중단)
|
||||
- **긴급도**: ~~MEDIUM~~ → ✅ RESOLVED (2025-08-27 해결)
|
||||
|
||||
### 테스트 방법
|
||||
```bash
|
||||
@ -195,4 +190,5 @@ curl -X POST http://192.168.219.45:3000/api/gmail/refresh/U0925SXQFDK
|
||||
|
||||
## 업데이트 이력
|
||||
- 2025-08-27: 초기 문서 작성 - ChromaDB 격리 문제 (Claude Code)
|
||||
- 2025-08-27: skill-email OAuth 토큰 자동 갱신 문제 추가 (Claude Code)
|
||||
- 2025-08-27: skill-email OAuth 토큰 자동 갱신 문제 추가 (Claude Code)
|
||||
- 2025-08-27: skill-email OAuth 토큰 자동 갱신 해결 완료 및 배포 (Claude Code)
|
||||
Loading…
x
Reference in New Issue
Block a user