개발자
로그인 요청이나 휴대폰 인증같은 요청을 할때, 잘못된 비밀번호, 인증번호를 보낸 경우에는 어떤 상태코드가 맞을까요? 401이라고 많이 하는 것 같은데, 401은 인증정보를 가지고 있지 않은 사용자가 인증을 필요로하는 요청을 할때 인증되지 않았으니 이후 진행 불가! 하면서 내려주는 것으로 생각하고 있어서요.. 개인적으로는 409가 적절하지 않을까 싶긴 한데, 저장된 비밀번호(서버의 상태)와 충돌이 일어났다고 생각할 수 있지 않을까요? 혹은, 아이디+비밀번호를 보내서 인증정보를 내려주는 api을 로그인이라고 하면, 아이디+비밀번호 또한 인증정보라서 인증 실패다! 하면서 401을 내려준다는 원리인가요?
답변 2
삭제된 사용자
2022년 10월 26일
HTTP Status code 401 : Unauthorized 즉, 리소스에 대한 인증자격증명이 없다는 것을 의미합니다. 로그인시 서버에 있는 유저의 정보와 일치하지 않거나 인증자격증명이 필요한 페이지에 인증자격증명이 없는 채로 접속을 시도할 때 나타내는 것으로 많이 사용됩니다. 언급하신 HTTP Status code 409 : Conflict 는 서버의 현재 상태와 요청이 충돌했음을 나타내며 주로 PUT 요청에 대응하여 나타납니다. 비즈니스 로직상 불가능한 요청을 응답하는 상태코드로 많이 쓰이는 것으로 알고 있습니다. +추가 조금 더 이해가 쉽도록 설명드리자면 로그인을 하면 로그인 이후의 페이지로 넘어가야 하는데, 인증정보가 없다면 다음 페이지로 넘어갈 수 없습니다. 인증정보가 없어 넘어갈 수 없는 것이기 때문에 401 코드가 더 적합하다고 볼 수 있을 것 같네요. MDN 에서 찾아보면 금방 이해가 되실 것 같습니다. https://developer.mozilla.org/ko/docs/Web/HTTP/Status/409
익명
작성자
2022년 10월 26일
추가 설명 보니까 명확해지는군요! 감사합니다!
흥미로워서 조금 찾아보았습니다. 스펙에서는 401을 다음과 같이 정의하고 있습니다. The 401 (Unauthorized) status code indicates that the request has not been applied because it lacks valid authentication credentials for the target resource. 로그인을 "ID/PASSWORD를 이용해 사용자 정보를 가져오는 동작" 이라고 정의하면, 로그인 실패는 사용자 인증에 실패하여 사용자 정보를 가져오는데 실패하는 것이므로 401로 봐도 괜찮을 것 같습니다. 오래전에도 비슷한 질문이 있었네요. - https://stackoverflow.com/questions/11714485/restful-login-failure-return-401-or-custom-response 가장 추천을 많이 받은 답변에서는 boolean 형태의 response를 지양하길 바라는데요, 로그인을 "이게 내 계정 정보 맞는지 확인(true/false)하는 동작" 이라고 생각하면, 로그인 실패에 대해 401은 어색할 수도 있겠습니다. ref: https://www.rfc-editor.org/rfc/rfc9110.html#name-401-unauthorized
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!