Skip to content

feat: 인증·토큰 구조화 로그 추가 및 보안 강화#22

Merged
ThinkKat merged 2 commits intomainfrom
dev
Feb 27, 2026
Merged

feat: 인증·토큰 구조화 로그 추가 및 보안 강화#22
ThinkKat merged 2 commits intomainfrom
dev

Conversation

@ThinkKat
Copy link
Copy Markdown
Owner

Summary

  • 인증·토큰 주요 이벤트에 key=value 구조화 로그 추가 (Loki LogQL 대응)
  • PUBLIC_URLS 와일드카드 제거로 /me, /withdrawal 인증 우회 취약점 수정

Changes

feat: 구조화 로그

  • AuthController: login()auth-username request attribute 세팅
  • GlobalExceptionHandler: BadCredentialsExceptionevent=login_fail | who | reason
  • UserService: event=register, event=login_success, event=withdraw
  • RefreshTokenService: event=token_rotation_success/fail, event=token_revoke/revoke_all
  • JwtAuthenticationFilter: event=access_token_expired(DEBUG), event=access_token_invalid(WARN)
  • JwtAuthenticationEntryPoint: event=unauthorized | code | path
  • IP는 Nginx 로그에서 확인 가능하므로 WAS 로그에서 제외

fix: PUBLIC_URLS 보수적으로 수정

  • 기존 /api/v1/auth/** 와일드카드 → 필요한 엔드포인트만 명시 (register, login, refresh, logout)
  • /me, /withdrawal이 인증 없이 접근 가능했던 문제 수정

Test plan

  • 전체 단위 테스트 통과
  • dev 프로파일 로컬 기동 후 시나리오 수동 확인
    • 회원가입 → event=register
    • 로그인 성공 → event=login_success
    • 로그인 실패 → event=login_fail | who | reason=bad_credentials
    • 토큰 없이 /me → 401 event=unauthorized
    • 잘못된 토큰 /me → 401 event=access_token_invalid + event=unauthorized | code=INVALID_TOKEN

- AuthController: login() 에 auth-username request attribute 세팅 (BadCredentials 핸들러에서 who 추출)
- GlobalExceptionHandler: BadCredentialsException 시 event=login_fail | who | reason 로그
- UserService: register/login_success/withdraw 이벤트 로그 (IP 불필요 — Nginx 로그에서 확인)
- RefreshTokenService: token_rotation_success/fail/revoke/revoke_all 이벤트 로그
- JwtAuthenticationFilter: access_token_expired(DEBUG), access_token_invalid(WARN) 로그
- JwtAuthenticationEntryPoint: event=unauthorized | code | path 로그
/me, /withdrawal 엔드포인트가 와일드카드로 인증 없이 접근 가능했던 문제 수정.
인증이 필요 없는 엔드포인트만 명시적으로 허용(register, login, refresh, logout).
@ThinkKat ThinkKat merged commit 48b43b8 into main Feb 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant