콘텐츠로 이동

로그인 판정과 계정 잠금 방지

포털은 로그인에 실패해도 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입니다.
  • 알 수 없는 판정값은 성공으로 보지 말고 오류로 처리하세요.
  • 거부된 로그인을 자동으로 다시 보내지 마세요.