Skip to content

enhancement(identity): 로그인 실패 제한을 30회·300회 및 5분으로 완화 #454 - #455

Merged
kusuri12-09 merged 1 commit into
developfrom
enhancement/454-login-failure-policy
Oct 19, 2026
Merged

kusuri12-09 merged 1 commit into
developfrom
enhancement/454-login-failure-policy

Conversation

@kusuri12-09

Copy link
Copy Markdown
Member

Summary

  • 로그인 성공까지 포함하던 시도 제한을 자격 증명 실패 기준으로 변경합니다.
  • 동일 IP+로그인 ID는 실패 30회, 동일 IP 전체는 실패 300회에 도달하면 각각 5분 차단합니다.

Related Issue

Current vs Improved

  • Before: 동일 IP+로그인 ID 5회, IP 전체 50회를 성공 여부와 관계없이 집계하고 첫 시도부터 15분 동안 제한했습니다.
  • After: 없는 계정 또는 잘못된 비밀번호만 실패로 집계합니다. 임계값에 도달한 실패는 기존 INVALID_CREDENTIALS를 반환하고 이후 요청부터 올바른 비밀번호도 429로 거부합니다.
  • After: 차단 시간은 임계 도달 시점부터 300초이며 재시도로 연장되지 않습니다. 성공 시 해당 IP+로그인 ID의 연속 실패만 초기화하고 IP 전체 누적은 유지합니다.
  • After: 차단 전 실패 카운터는 마지막 실패부터 300초 후 만료됩니다. 비밀번호 재설정 제한은 유지합니다.

Impact

  • 로그인 재시도 여유를 확대하고 성공한 요청으로 잠기는 문제를 해소합니다.
  • Redis Lua로 실패 집계·차단 생성·성공 초기화와 차단 재확인을 원자적으로 처리합니다.
  • 입력 불량 및 비활성 계정 오류는 자격 증명 실패 횟수에 포함하지 않습니다.

Testing

  • 실제 로컬 Redis에 제품 Lua를 직접 실행하여 30회·300회 임계값, 300초 TTL, 차단 시간 미연장, 성공 시 계정 카운터만 초기화, 만료 후 해제 및 400건 동시 실패를 확인했습니다.
  • 서비스·Redis 단위 테스트와 기존 Testcontainers 통합 테스트를 새 정책에 맞게 보강했습니다.
  • git diff --check 통과.
  • Bazel 테스트는 기존 설치 캐시 손상으로 실패하여 별도 임시 캐시로 재시도했습니다. 이후 Maven 저장소의 DNS 오류(UnknownHostException)로 컴파일 전에 실패하여 Kotlin 테스트 통과 여부는 미확인입니다.
  • Docker가 실행되지 않아 Testcontainers 통합 테스트는 실행하지 못했습니다. 실제 운영 배포는 수행하지 않았습니다.

Risk

  • 운영 환경변수가 기본값보다 우선하므로 배포 시 AUTH_LOGIN_MAX_ATTEMPTS=30, AUTH_LOGIN_IP_MAX_ATTEMPTS=300, AUTH_LOGIN_WINDOW_SECONDS=300으로 확인해야 합니다.
  • 실패 전용 v2 Redis 키를 사용하므로 기존 로그인 시도 카운터와 잠금은 승계하지 않습니다.
  • 기존 CD PR #453과 분리하여 Identity 관련 파일 9개만 포함합니다.

Checklist

  • No functional behavior change (unless intended)
  • Metrics / benchmarks updated if applicable

@coderabbitai

coderabbitai Bot commented Oct 19, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one): 1
  • ready-for-review
🚫 Excluded labels (none allowed): 2
  • wip
  • do-not-review

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: EntryDSM/entrydsm-platform/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 46ed5f9a-c87a-4e93-8744-6754897b0cc4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kusuri12-09
kusuri12-09 merged commit 8f4beac into develop Oct 19, 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.

enhancement(identity): 로그인 실패 제한 완화 및 실패 기준 집계

2 participants