Files
portfolio-hub/docs/srs/Documentation/req-021_token-expiry-and-rotation-policy.md
T
genichinandClaude Sonnet 4.6 c815ce39b6 feat: dcy-003/004 토큰 surface 개편 및 daemon lifecycle 정책 구현 (BAT-006/007)
BAT-006 (REQ-016/017/018):
- client token 발급 경로 제거 (issue_client_token, POST /auth/tokens, 관련 스키마/테스트)
- service-token rotate unique index revoked_at IS NULL 조건 추가 (Alembic CONCURRENTLY 마이그레이션)
- POST /auth/service-tokens body daemon_id forward 누락 보정 (1-line fix)

BAT-007 (REQ-022/023):
- daemon deactivate 시 바인딩 service token 자동 revoke (CLI --force 옵션 + revoke_tokens_by_daemon_id)
- NULL daemon_id legacy token 진단 CLI (migrate-null-daemon --dry-run)

거버넌스 문서: dcy-003/004 Discovery, REQ-016~023/025~032 신규, BAT-006/007 전체 산출물

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 01:03:39 +00:00

4.8 KiB

REQ-021: 토큰 만료·회전 정책 정의

  • Status: Approved
  • Type: Documentation
  • Priority: Medium
  • Owner: Justin Ko

Intent

  • 현행 토큰 만료 정책이 코드에 흩어져 있고(session은 settings.session_token_ttl_hours, service는 365일 default, --no-expiry 옵션) baseline 정책 명세가 없어 운영 일관성이 떨어진다. 토큰 type별 기본 TTL과 no_expiry 허용 범위·강제 회전 정책을 baseline에 명시한다.
  • dcy-004 OQ-5 결정에 따라 현행 TTL 유지로 시작하되 정책 표면을 명시해 후속 변경 추적 기반을 확보한다.

Requirement

  • docs/runtime-flows.md(또는 docs/interface-contract.md)에 "토큰 만료·회전 정책" 섹션을 추가한다. 명시 항목:
    • type별 기본 TTL: session = settings.session_token_ttl_hours(현행 값 유지), service = 365일 default, env = 만료 없음
    • no_expiry 허용 범위: service token 한정. session/(client는 폐지됨) 발급 경로는 모두 거부
    • 강제 회전 주기: 본 정책에서는 강제 주기 두지 않음. env admin token의 권장 회전 주기는 REQ-024(env admin SOP)에서 별도 정의
    • 정책 위반 발급 처리: no_expiry를 session에 요청하면 HTTP 422 또는 ValueError로 거부
  • 정책 명세는 현행 코드 구현과 일치해야 한다(AuthService.login, AuthService.issue_service_token의 만료 처리 로직 reference 명시).
  • 본 REQ는 정책 baseline 명시에 집중하고 코드 enforcement(no_expiry session 거부 등)가 누락된 경우 follow-up REQ로 분리한다.

Acceptance Criteria

  1. Given docs/runtime-flows.md 검토, When 본 REQ 구현 후, Then "토큰 만료·회전 정책" 섹션이 존재하고 type별 기본 TTL이 명시된다.
  2. Given 정책 검토, When no_expiry 허용 범위 항목을 확인, Then service 한정으로 명시되고 session/client는 거부됨이 명시된다.
  3. Given 정책 검토, When 강제 회전 주기 항목을 확인, Then 본 정책에서는 두지 않으며 env admin은 REQ-024에서 별도 정의됨이 명시된다.
  4. Given 정책 위반 발급 시도(예: no_expiry를 session에 요청), When 정책 명세 검토, Then HTTP 422 또는 ValueError 거부 응답이 명시된다.
  5. Given 정책 명세와 현행 코드 매핑, When app/services/auth_service.py의 login(session 만료)·issue_service_token(service 만료·no_expiry) 분기와 비교, Then 정책 본문이 코드와 일치하거나 불일치 항목이 follow-up으로 기록된다.

Impacted Area

  • Docs:
    • docs/runtime-flows.md — "토큰 만료·회전 정책" 섹션 신규 추가 (또는 docs/interface-contract.md에 추가 후 runtime-flows에서 참조)
  • Modules: 없음 (정책 baseline 문서 정의. 코드 enforcement는 현행 그대로 유지)
  • Tests: 없음 (문서 전용. AC-4 정책 위반 거부 회귀는 향후 코드 변경 시점에 추가)

Notes

  • dcy-004 OQ-5 결정으로 현행 TTL 유지가 채택됐다. 본 REQ는 정책 명세 baseline화를 통해 후속 변경 추적 기반을 확보한다.
  • session 만료 시 in-flight 거래 영향 같은 정책 세부 사항은 본 REQ 범위 밖이며 release plan 또는 별도 운영 Discovery에서 다룬다.
  • 강제 회전 주기(분기/반기/연간)는 env admin token에 한정해 REQ-024에서 다루며, session/service에는 강제 주기를 두지 않는다.
  • Source: dcy-004 FR-6, dcy-004 OQ-5 결정.

Change Log

CHG-20260520-02

  • Date: 2026-05-20
  • Author: Justin Ko

Change Summary

  • Status: Proposed → Approved

Intent

  • 승인 게이트 통과: 필수 필드(Status/Type/Priority/Owner/Intent/Requirement/AC/Impacted Area/Change Log) 모두 충족, AC 구체성 확인 완료, blocker 없음

Acceptance Criteria Delta

  • No change

Impacted Area Delta

  • No change

Delivery Trace Delta

  • Batches: none (미정)
  • Releases: none (미정)

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no
  • Status Recommendation: promote-to-approved
  • Follow-up Action: batch 계획 편입

CHG-20260520-01

  • Date: 2026-05-20
  • Author: Justin Ko

Change Summary

  • 최초 생성 — dcy-004 confirm-discovery 후 draft-req 실행. dcy-004 FR-6 산출물.

Intent

  • 토큰 만료 정책 source of truth 확보 + 현행 TTL 유지 정책 baseline 명시.

Acceptance Criteria Delta

  • Added:
    • AC-1~5 최초 작성

Impacted Area Delta

  • Docs: docs/runtime-flows.md — 최초 지정
  • Modules: 없음
  • Tests: 없음

Delivery Trace Delta

  • Batches: none (미정)
  • Releases: none (미정)

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no
  • Status Recommendation: keep-current
  • Follow-up Action: confirm-req 후 batch 계획 편입; REQ-019/020과 동일 batch 권장

Validation Plan

  • 사람 리뷰로 AC-1~5 검증