[HTTP] 401 Unauthorized와 403 Forbidden의 차이

간혹 API 예외처리를 하다보면 어드민만 사용할 수 있어야하거나, 내 정보의 수정/삭제 같이 권한에 민감한 PATCH, DELETE 메소드 api들에 대한 예외가 발생 시 예외 상황에 맞는 HTTP 상태코드를 전달해야하는데 같은 예외 사항에 대해 가끔 403 Forbidden과 401 Unauthorized를 혼용하는 경우가 있었다.

 

HTTP 401 Unauthorized

401 상태 코드는 해당 클라이언트가 인증되지 않았거나, 유효한 인증 자격 증명이 없기 때문에 요청이 거부되었음을 나타내는 상태이다. 해당 코드는 인증되지 않은 클라이언트가 요청을 전송하였기에 요청의 정상 처리가 불가함을 나타내는 것이다. 

대표적으로 내 정보 조회/수정 같이 유저 민감 정보를 핸들링하는 경우와 같이 유저 인증이 필요한 API에 로그인 없이 해당 API를 호출하면 401 Unauthorized를 리턴받을 수 있다.

 

HTTP 403 Forbidden

403 상태 코드는 인증된 클라이언트에서 정상적으로 서버에 요청이 전달되었고 서버가 요청을 이해하였지만, 인증에 권한이 부족하여 요청이 거절되었다는 것을 의미하는 상태이다. 해당 코드는 클라이언트가 인증되어 있지만, 인증 정보에 해당 요청에 대한 권한이 없어 요청의 정상 처리가 불가함을 나타내는 것이다.

대표적으로 로그인하여 인증된 상태에서 다른 유저가 작성한 글의 수정/삭제와 같이 접근 권한이 없는 API를 호출하려하면 403 Forbidden을 리턴받을 수 있다.

 

401 Unauthorized와 403 Forbidden의 차이

401 Unauthorized와 403 Forbidden은 클라이언트의 인증 여부에서 차이가 난다.

유저가 성공적으로 로그인을 하고 API를 호출하였을 때, 접근 권한이 없다면 403 Forbidden, 유저가 로그인 없이 비회원 상태에서 유저 민감 정보 관련 API를 호출하였다면 401 Unauthorized가 리턴되야한다.

 

401 Unauthorized

  • 클라이언트 인증 상태: X 
  • ex) 유저가 로그인하지 않은 경우

 

403 Forbidden

  • 클라이언트 인증 상태: O
  • ex) 유저가 로그인은 하였으나, 접근 권한이 부족한 경우

 

참고