로그인 판정과 계정 잠금 방지
왜 어려운가
섹션 제목: “왜 어려운가”포털은 로그인에 실패해도 HTTP 200을 돌려줍니다. 상태 코드로는 성공과 실패를 구분할 수 없습니다. 결과는 응답으로 온 작은 HTML 페이지의 스크립트 안에 있습니다.
var result = '<값>'게다가 비밀번호가 틀릴 때마다 포털의 실패 횟수가 올라가고, 일정 횟수를 넘으면 계정이 잠깁니다. 실패한 로그인을 습관처럼 재시도하면 사용자의 계정을 잠그게 됩니다.
판정 흐름 한눈에
섹션 제목: “판정 흐름 한눈에”판정값과 에러 코드
섹션 제목: “판정값과 에러 코드”result 값 |
포털 메시지의 뜻 | 라이브러리 |
|---|---|---|
OK |
성공 (반환 주소로 이동) | 다음 단계 진행 |
erridpwd, Error |
아이디나 비밀번호가 일치하지 않음 | AUTHENTICATION_FAILED, 추가 요청 없이 중단 |
pwdNeedChg |
비밀번호를 여러 번 틀려 계정이 잠김 | ACCOUNT_LOCKED |
invalidDt, invalid |
사용 기간 종료 또는 관리자 차단 | ACCOUNT_UNAVAILABLE |
| 그 밖의 값 | 로그인 처리 중 오류 | SESSION_ERROR |
var result가 없음 |
포털 화면 형식이 바뀐 것으로 봄 | 계속 진행하고, 뒤 단계의 401이 판정 |
이 대응은 spec/contract.json이 단일 원본이고, 세 언어의 테스트가 같은 값을 쓰는지 확인합니다.
라이브러리의 규칙
섹션 제목: “라이브러리의 규칙”- 포털이 거부한 로그인(틀린 비밀번호, 잠금, 사용 불가)은 재시도하지 않습니다. 첫 실패에서 멈춥니다.
- 재시도는 2xx가 아닌 응답이나 시간 초과 같은 전송 문제에만 합니다 (설정).
- 통합 인증은 로그인을 한 번만 하므로 실패 횟수도 호출당 최대 한 번만 올라갑니다.
- 입력이 비어 있으면 요청을 보내지 않고
INVALID_INPUT으로 끝냅니다.
잠금 횟수에 대해 확인하지 못한 것
섹션 제목: “잠금 횟수에 대해 확인하지 못한 것”포털 소스의 주석은 5회 실패에서 잠긴다고 적고 있고, 포털 안내도 비슷하게 약 5회입니다. 그러나 정확한 횟수와, 로그인에 성공하면 횟수가 초기화되는지는 확인하지 못했습니다. 보수적으로 다루세요.
직접 구현한다면
섹션 제목: “직접 구현한다면”- 상태 코드가 아니라 응답 본문의 판정값을 읽으세요. 샘플은 저장소의
spec/fixtures/portal_login_ok.html,portal_login_erridpwd.html입니다. - 알 수 없는 판정값은 성공으로 보지 말고 오류로 처리하세요.
- 거부된 로그인을 자동으로 다시 보내지 마세요.
이어서 보기
섹션 제목: “이어서 보기”- 에러 코드
- SSO 흐름
- 원본: spec/PORTAL_FLOW.md의 Step 1
