-
Notifications
You must be signed in to change notification settings - Fork 0
refactor: align internal auth around jwt request tokens and session lifecycle #758
Copy link
Copy link
Open
Description
요약
이번 작업은 Deck 내부 인증/세션 모델을 현재 구현 기준으로 정렬하는 것입니다.
WEB: cookie JWT +user_sessionsAPP: OAuth2 Authorization Code + PKCE + App Link, JWT access tokenCLI: OAuth2 Authorization Code + PKCE, JWT access tokenMCP: 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 / CLI를user_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.mddocs/reference/backend/session-management.mddocs/reference/backend/device-auth-integration.mddocs/reference/backend/README.md
plans
docs/plans/2026-04-01-auth-session-design.mddocs/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/CLIrevoke 이후 이미 발급된 access token은 TTL 동안 살아 있을 수 있고, 다음 refresh에서 session/device 상태로 차단합니다.MCP는user_sessions.session_type값이 아니라 OAuth client 종류입니다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels