improvement: 비밀번호 변경 보안 정책 적용 (#251) #252

Merged
seonkyu.kim merged 1 commits from improvement/#251-password-policy into develop 2026-02-26 01:08:22 +00:00
Owner

📋 작업 요약

  • 비밀번호 변경 시 서버측 정책 검증 강화 (영대/소문자, 숫자, 특수문자 조합)
  • 동일 비밀번호 재사용 금지
  • 변경 성공 시 Refresh Token 삭제 → 전체 세션 무효화
  • re_login_required: true 응답 힌트 제공
  • 에러코드 2종 추가 (PasswordPolicyViolation, PasswordReuseForbidden)

Closes #251

🛠️ 작업 내용 (Changes)

  • SPMS.Domain/Common/ErrorCodes.cs — PasswordPolicyViolation(123), PasswordReuseForbidden(124) 추가
  • SPMS.Application/DTOs/Auth/ChangePasswordRequestDto.cs — MaxLength + RegularExpression 정책 추가
  • SPMS.Application/DTOs/Auth/ChangePasswordResponseDto.cs — 신규 (re_login_required)
  • SPMS.Application/Interfaces/IAuthService.cs — 반환 타입 Task → Task
  • SPMS.Application/Services/AuthService.cs — 동일 비밀번호 재사용 금지 + 세션 무효화 로직
  • SPMS.API/Controllers/AuthController.cs — Swagger 문서 보강 + 응답 타입 변경

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

  • 비밀번호 정책은 DataAnnotation(RegularExpression)으로 1차 검증, 동일 비밀번호는 서비스 레이어에서 BCrypt 비교
  • 세션 무효화는 Refresh Token null 처리로 구현 (Access Token은 만료까지 유효하나 짧은 TTL)
  • 기존 ChangePasswordAsync 반환 타입이 TaskTask<ChangePasswordResponseDto>로 변경됨

체크리스트 (Self Checklist)

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

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

빌드했습니다.
    경고 0개
    오류 0개
## 📋 작업 요약 - 비밀번호 변경 시 서버측 정책 검증 강화 (영대/소문자, 숫자, 특수문자 조합) - 동일 비밀번호 재사용 금지 - 변경 성공 시 Refresh Token 삭제 → 전체 세션 무효화 - `re_login_required: true` 응답 힌트 제공 - 에러코드 2종 추가 (PasswordPolicyViolation, PasswordReuseForbidden) ## 🔗 관련 이슈 (Related Issues) Closes #251 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.Domain/Common/ErrorCodes.cs` — PasswordPolicyViolation(123), PasswordReuseForbidden(124) 추가 - [x] `SPMS.Application/DTOs/Auth/ChangePasswordRequestDto.cs` — MaxLength + RegularExpression 정책 추가 - [x] `SPMS.Application/DTOs/Auth/ChangePasswordResponseDto.cs` — 신규 (re_login_required) - [x] `SPMS.Application/Interfaces/IAuthService.cs` — 반환 타입 Task → Task<ChangePasswordResponseDto> - [x] `SPMS.Application/Services/AuthService.cs` — 동일 비밀번호 재사용 금지 + 세션 무효화 로직 - [x] `SPMS.API/Controllers/AuthController.cs` — Swagger 문서 보강 + 응답 타입 변경 ## 📢 리뷰어 참고 사항 (To Reviewers) - 비밀번호 정책은 DataAnnotation(`RegularExpression`)으로 1차 검증, 동일 비밀번호는 서비스 레이어에서 BCrypt 비교 - 세션 무효화는 Refresh Token null 처리로 구현 (Access Token은 만료까지 유효하나 짧은 TTL) - 기존 `ChangePasswordAsync` 반환 타입이 `Task` → `Task<ChangePasswordResponseDto>`로 변경됨 ## ✅ 체크리스트 (Self Checklist) - [x] 빌드(Build)가 성공적으로 수행되었는가? - [x] 모든 단위 테스트(Unit Test)를 통과하였는가? - [x] 불필요한 로그나 주석을 제거하였는가? - [x] 컨벤션(Clean Architecture, Naming)을 준수하였는가? - [x] 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가? ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` 빌드했습니다. 경고 0개 오류 0개 ```
seonkyu.kim added 1 commit 2026-02-26 01:07:40 +00:00
- 비밀번호 정책 서버 검증 강화 (영대/소문자, 숫자, 특수문자 조합, 8~64자)
- 동일 비밀번호 재사용 금지 검증 추가
- 비밀번호 변경 후 세션 무효화 (Refresh Token 삭제)
- ChangePasswordResponseDto 신규 (re_login_required 힌트)
- 에러코드 추가 (PasswordPolicyViolation, PasswordReuseForbidden)
- AuthController Swagger 문서 보강

Closes #251
seonkyu.kim added the
Priority
Medium
Status
In Progress
Type
Improvement
labels 2026-02-26 01:07:55 +00:00
seonkyu.kim self-assigned this 2026-02-26 01:08:03 +00:00
seonkyu.kim added this to the Phase 3: 운영 기능 milestone 2026-02-26 01:08:10 +00:00
seonkyu.kim requested review from Owners 2026-02-26 01:08:18 +00:00
seonkyu.kim merged commit 49da5a91c8 into develop 2026-02-26 01:08:22 +00:00
seonkyu.kim deleted branch improvement/#251-password-policy 2026-02-26 01:08:50 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-26 01:09:06 +00:00
Sign in to join this conversation.
No description provided.