멀티 서비스 배포에서 Authentication Token 불일치 해결 방법
Source: Dev.to
TL;DR
Railway, VPS, 로컬 Mac Mini 간 인증 토큰 불일치로 인해 일부 API가 실패했습니다. INTERNAL_AUTH_SECRET을 모든 환경에 동일하게 맞추고 Gateway 토큰을 재생성함으로써 문제를 해결했습니다. 핵심 기능은 가시성이 사라져도 계속 실행되었습니다.
다중 환경 마이크로서비스 설정
- 서비스 간 공유 인증 토큰
- 아키텍처: Railway (PaaS) + VPS + 로컬 환경
관찰된 증상
| Service / Skill | Status | Note |
|---|---|---|
sessions_list | ❌ 403 Forbidden | Gateway 토큰 만료 |
app-nudge-evening | ❌ Auth failed | INTERNAL_AUTH_SECRET 불일치 |
| 75 skill executions | ✅ 정상 작동 | 인증 없이 또는 로컬 |
핵심 인사이트: 모든 것이 한 번에 실패한 것은 아니었습니다.
Railway 환경
INTERNAL_AUTH_SECRET=abc123old
로컬 환경
INTERNAL_AUTH_SECRET=xyz789new
원인: 로컬에서 변경한 후 Railway 환경 변수를 수동으로 업데이트하는 것을 잊음.
추가 증상
openclaw status→ Gateway 토큰: 만료sessions_list→ 403 Forbidden
원인: 장기 실행 시스템이 토큰 회전을 수행했지만 로컬 설정이 업데이트되지 않음.
환경별 현재 값 확인
echo "Railway: $(railway env get INTERNAL_AUTH_SECRET)"
echo "Local: $INTERNAL_AUTH_SECRET"
비밀키가 불일치하면 동기화
railway env set INTERNAL_AUTH_SECRET="$INTERNAL_AUTH_SECRET"
토큰 상태 확인
openclaw status
# → Gateway token status: expired
새로운 토큰 생성
openclaw gateway token-refresh
# → New token: gw_xxx...
런타임 환경 업데이트
export OPENCLAW_GATEWAY_TOKEN="gw_xxx..."
토큰이 필요한 API 호출 (토큰에 영향)
curl -H "Authorization: Bearer $TOKEN" api/sessions
curl -H "X-Internal-Secret: $SECRET" api/nudge
토큰이 필요 없는 로직 (영향 없음)
local-skill-execution # ✅ 계속 작동
file-operations # ✅ 계속 작동
cron-jobs # ✅ 계속 작동
수정 전후 메트릭
| Metric | Before | After |
|---|---|---|
sessions_list | ❌ 403 | ✅ 정상 작동 |
app-nudge-evening | ❌ Auth fail | ✅ 정상 작동 |
| System automation | 78 % (유지) | 78 % (유지) |
| Core skills | 100 % 성공 | 100 % 성공 |
총 수정 시간: 9 시간 (진단 4 h + 근본 원인 분석 3 h + 수정 2 h)
교훈
부분 실패에 대비 설계
인증 문제 때문에 핵심 기능이 중단되지 않도록 해야 합니다.
토큰 동기화 자동화
수동 환경 업데이트는 쉽게 놓칠 수 있습니다.
단계적 저하 vs. 전체 실패
일부 API가 실패한다고 전체 시스템이 다운되는 것은 아닙니다.
가시성 vs. 가용성
메트릭 가시성이 사라진다고 시스템이 작동하지 않는 것은 아닙니다.
토큰‑동기화 체크 스크립트 (cron)
#!/bin/bash
# Token sync checker for cron
check_token_sync() {
railway_secret=$(railway env get INTERNAL_AUTH_SECRET)
local_secret=$INTERNAL_AUTH_SECRET
if [ "$railway_secret" != "$local_secret" ]; then
echo "🚨 Token mismatch detected"
slack_alert "Auth tokens out of sync"
exit 1
fi
}
# Run every 6 hours
0 */6 * * * /path/to/check_token_sync.sh
다중 환경 인증은 항상 drift(드리프트)합니다. 사람의 기억에 의존하지 말고, 체크를 자동화해 즉시 불일치를 감지하세요.