improvement: 인증 보안 정책 — Rate Limit + 시도제한 + 보안 로깅 (#190) #209

Merged
seonkyu.kim merged 1 commits from improvement/#190-auth-security-policy into develop 2026-02-25 02:59:53 +00:00
Owner

📋 작업 요약

  • 인증 민감 API에 IP 기반 Rate Limit 정책(auth_sensitive) 적용
  • 로그인 시도 횟수 제한 구현 (Redis 카운터, 기존 에러코드 113 활성화)
  • 비밀번호 찾기/임시 비밀번호 이메일별 요청 제한
  • AuthService 보안 이벤트 구조적 로깅 (ILogger 주입)

Closes #190

🛠️ 작업 내용 (Changes)

  • SPMS.API/Program.csauth_sensitive FixedWindowLimiter 추가 (20회/15분/IP)
  • SPMS.API/Controllers/AuthController.cs — Login/VerifyEmail/ResendVerification에 [EnableRateLimiting] + Swagger 429
  • SPMS.API/Controllers/PasswordController.cs — ForgotPassword/IssueTempPassword에 [EnableRateLimiting]
  • SPMS.Application/SPMS.Application.csprojMicrosoft.Extensions.Logging.Abstractions 패키지 추가
  • SPMS.Application/Services/AuthService.cs — ILogger 주입 + 로그인 시도제한(5회/15분) + forgot/temp 요청제한(3회/1시간) + 보안 이벤트 로깅

📢 리뷰어 참고 사항 (To Reviewers)

  • 2계층 보호: IP 기반(미들웨어 Rate Limit) + Email 기반(서비스 Redis 카운터)
  • forgot/temp 제한 초과 시 silent 반환 (계정 존재 비노출 원칙 유지)
  • 기존 verify_attempts Redis 패턴과 동일한 방식으로 구현
  • LoginAttemptExceeded(113) 에러코드가 이미 ErrorCodes에 정의되어 있어 신규 코드 추가 불필요

체크리스트 (Self Checklist)

  • 빌드(Build)가 성공적으로 수행되었는가?
  • 모든 단위 테스트(Unit Test)를 통과하였는가?
  • 불필요한 로그나 주석을 제거하였는가?
  • 컨벤션(Clean Architecture, Naming)을 준수하였는가?
  • 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가?

📸 스크린샷 / 테스트 로그 (Screenshots/Logs)

빌드했습니다.
    경고 0개
    오류 0개
## 📋 작업 요약 - 인증 민감 API에 IP 기반 Rate Limit 정책(`auth_sensitive`) 적용 - 로그인 시도 횟수 제한 구현 (Redis 카운터, 기존 에러코드 113 활성화) - 비밀번호 찾기/임시 비밀번호 이메일별 요청 제한 - AuthService 보안 이벤트 구조적 로깅 (ILogger 주입) ## 🔗 관련 이슈 (Related Issues) Closes #190 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.API/Program.cs` — `auth_sensitive` FixedWindowLimiter 추가 (20회/15분/IP) - [x] `SPMS.API/Controllers/AuthController.cs` — Login/VerifyEmail/ResendVerification에 `[EnableRateLimiting]` + Swagger 429 - [x] `SPMS.API/Controllers/PasswordController.cs` — ForgotPassword/IssueTempPassword에 `[EnableRateLimiting]` - [x] `SPMS.Application/SPMS.Application.csproj` — `Microsoft.Extensions.Logging.Abstractions` 패키지 추가 - [x] `SPMS.Application/Services/AuthService.cs` — ILogger 주입 + 로그인 시도제한(5회/15분) + forgot/temp 요청제한(3회/1시간) + 보안 이벤트 로깅 ## 📢 리뷰어 참고 사항 (To Reviewers) - 2계층 보호: IP 기반(미들웨어 Rate Limit) + Email 기반(서비스 Redis 카운터) - forgot/temp 제한 초과 시 silent 반환 (계정 존재 비노출 원칙 유지) - 기존 `verify_attempts` Redis 패턴과 동일한 방식으로 구현 - `LoginAttemptExceeded(113)` 에러코드가 이미 ErrorCodes에 정의되어 있어 신규 코드 추가 불필요 ## ✅ 체크리스트 (Self Checklist) - [x] 빌드(Build)가 성공적으로 수행되었는가? - [x] 모든 단위 테스트(Unit Test)를 통과하였는가? - [x] 불필요한 로그나 주석을 제거하였는가? - [x] 컨벤션(Clean Architecture, Naming)을 준수하였는가? - [x] 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가? ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` 빌드했습니다. 경고 0개 오류 0개 ```
seonkyu.kim added 1 commit 2026-02-25 02:15:02 +00:00
- auth_sensitive 명명 Rate Limit 정책 추가 (20회/15분/IP)
- AuthController 3개 + PasswordController 2개 메서드에 EnableRateLimiting 적용
- 로그인 시도 제한 구현 (5회/15분, Redis 카운터, LoginAttemptExceeded 에러코드 활성화)
- 비밀번호 찾기/임시 비밀번호 요청 제한 (3회/1시간, silent 반환)
- AuthService 보안 이벤트 구조적 로깅 (ILogger 주입)
- Swagger 429 응답 문서화

Closes #190
seonkyu.kim added the
Priority
High
Status
In Progress
Type
Improvement
labels 2026-02-25 02:15:22 +00:00
seonkyu.kim self-assigned this 2026-02-25 02:15:30 +00:00
seonkyu.kim added this to the Phase 0: 공통 기반 + 인증 milestone 2026-02-25 02:15:32 +00:00
seonkyu.kim requested review from Owners 2026-02-25 02:15:35 +00:00
seonkyu.kim merged commit 7c9939787e into develop 2026-02-25 02:59:53 +00:00
seonkyu.kim deleted branch improvement/#190-auth-security-policy 2026-02-25 03:00:10 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-25 03:00:35 +00:00
Sign in to join this conversation.
No description provided.