Skip to content

refactor: align internal auth around jwt request tokens and session lifecycle #758

@keIIy-kim

Description

@keIIy-kim

요약

이번 작업은 Deck 내부 인증/세션 모델을 현재 구현 기준으로 정렬하는 것입니다.

  • WEB: cookie JWT + user_sessions
  • APP: OAuth2 Authorization Code + PKCE + App Link, JWT access token
  • CLI: OAuth2 Authorization Code + PKCE, JWT access token
  • MCP: OAuth client이지만 user_sessions.session_type에는 들어가지 않음, /mcp/** 보호 자원 접근은 JWT access token
  • request path는 JWT로 stateless하게 처리
  • refresh / logout / device registration / revoke 같은 lifecycle은 서버 상태(user_sessions, user_devices, oauth2_authorization)로 관리

핵심은 세션이 lifecycle의 기준이고, JWT는 요청 인증 포맷이라는 점입니다.

반영 완료

  • session_id를 내부 JWT와 세션 lifecycle의 canonical linkage로 정리
  • APP 세션 상태를 PENDING / ACTIVE / REVOKED로 명시
  • WEB / APP / CLIuser_sessions.session_type 기준으로 정리
  • first-party access token(WEB/APP/CLI/MCP)을 JWT로 정리
  • /mcp/** 보호 자원도 JWT access token 기준으로 정리
  • user_sessions 최종 스키마를 V1__init.sql에 직접 반영
  • 세션 관련 후속 Flyway migration 제거
  • auth/session reference 문서와 plans 문서 최신화
  • 모바일 App Link 실기 검증 + Flutter sample test/analyze 검증 완료

문서

reference

  • docs/reference/backend/auth.md
  • docs/reference/backend/session-management.md
  • docs/reference/backend/device-auth-integration.md
  • docs/reference/backend/README.md

plans

  • docs/plans/2026-04-01-auth-session-design.md
  • docs/plans/2026-04-01-auth-session-implementation.md

검증

  • backend auth/session 관련 회귀 테스트 묶음 통과
  • tools/mobile_auth_test_app: mise run test, mise run analyze 통과
  • Android emulator + mobile_auth_test_app 수동 검증
    • callback 복귀
    • token exchange 성공
    • auth me 성공
    • device registration 성공
    • refresh 성공
    • current device disconnect 성공
    • 이후 refresh 400 invalid_grant

메모

  • APP/CLI revoke 이후 이미 발급된 access token은 TTL 동안 살아 있을 수 있고, 다음 refresh에서 session/device 상태로 차단합니다.
  • MCPuser_sessions.session_type 값이 아니라 OAuth client 종류입니다.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions