Network

[Network] HTTP 응답코드 401(Unauthorizaed)와 403(Forbidden)의 차이점

HEY__ 2024. 9. 24. 07:32
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

✅ HTTP 응답코드 4xx

HTTP 응답 코드 400번대는 Client 오류로 인해 요청(Request)를 처리할 수 없거나, 처리하지 않았음을 의미합니다. 

Client의 요청에 오류가 있음을 의미하며, Client측에서는 400번대 응답 코드를 받은 후 재요청 할 때 이전과 같은 형태로 요청해서는 안됩니다. 

 

HTTP 응답코드 400번대에는 `401 Unauthorized`와 `403 Forbidden`이 있습니다.

두 응답코드 모두 "요청을 거부"하는 상태 코드이지만, 그 사유가 다릅


✅ HTTP 401 Unauthorized

`401 Unauthorized`는 client가 인증(Authentication)되지 않았거나, 유효하지 않은 인증(Authentication)을 가지고 있어 요청에 대한 처리가 거부되었음을 나타냅니다.

즉, 서버가 사용자 인증을 하지 못했다는 뜻입니다.

 

`401 Unauthorized`는 다음과 같은 상황에 발생할 수 있습니다.

  • 권한/자격(Credentials)이 없거나 유효하지 않은 경우
    사용자가 인증 정보를 가지고 있지 않거나, 발급받은 인증 정보가 유효하지 않을 때 발생할 수 있습니다.
    사용자가 틀린 비밀번호를 통해 로그인을 하는 경우를 예로 들 수 있습니다.
  • 권한/자격(Credentials)의 유효기간이 지난 경우
    사용자의 인증 토큰 혹은 세션의 유효기간이 지난 경우, 다시 인증을 하기 이전까지는 인증을 통해 접근할 수 있는 곳에 접근 허가를 주지 않을 것입니다.
    `OAuth`를 이용한 로그인에서 `access token`의 유효기간이 만료되어 다시 재로그인을 해야 하는 상황을 예로 들 수 있습니다.

`401 Unauthorized`는 사용자 인증 자격 증명이 필요한 상태입니다.

서버는 에러 코드와 함께 클라이언트가 인증을 할 수 있도록, `WWW-Authenticate` 응답 헤더에 리소스를 요청할 수 있는 방법을 알려줍니다.

HTTP/1.1 401 Unauthorized
Date: Wed, 21 Oct 2015 07:28:00 GMT
WWW-Authenticate: Basic realm="Access to staging site"

HTTP 403 Forbidden

`403 Forbidden`은 client에 대해 인증은 성공적으로 마쳤으나, 클라이언트가 요청한 리소스(resource)에 대해서는 접근이 막혀있는 상황을 나타냅니다.

`401 Unauthorized`와의 차이점은, 사용자의 자격 증명(Credential)은 유효하지만, 특정 리소스에 대해 접근/활용할 수 있는 한이 부족할 때 사용한다는 점입니다.

따라서 사용자가 로그인 등을 통해 재인증(re-authenticating)을 완료하여도, 접근을 계속해서 거절합니다.

 

`403 Forbidden`은 다음과 같은 상황에 발생할 수 있습니다. 

  • 권한 부족
    사용자의 자격 증명(Credentials)이 특정 리소스에 접근하기 위해 필요한 권한이 만족하지 않을 때 발생합니다.
    사용자의 권한(Role)이나 접근 제한 설정으로 인해 일어날 수 있습니다.
  • IP 블랙리스트
    몇몇 웹 사이트는 IP 주소에 기반해 접근 제어를 하는 경우가 있습니다.
    특정 사용자의 접근을 막거나, 특정 지역에서 특정 컨텐츠를 접근하는 것을 막을 때 사용합니다.

401(Unauthorized)와 403(Forbidden)의 차이 정리

두 HTTP 에러 코드 모두 `접근 거부`를 알리지만, authentication(인증)과 authorization(인가)의 의미에서는 둘의 이유가 다릅니다.

 

  401(Unauthorized) 403(Forbidden)
Authentication vs Authorization Authentication(인증)에 실패 Authentication(인증)은 유효하나, Authorization(인가)에 실패했음
Credentials 유효한 Credentials이 필요함을 알림 Credentials은 유효하나, 권한이 부족함을 알림
Response to the User 사용자에게 로그인을 하거나, 유효한 Credentials을 받는 것을 요청 Authentication(인증) 상태에 관계없이, 접근이 거부됨을 알림

 


✅  참고 자료 & 링크

- [HTTP] HTTP 상태 401(Unauthorizaed) vs 403(Forbidden) 차이

- Demystifying HTTP Error Codes 401 vs 403

- 401 Unauthorized - HTTP | MDN

- 403 Forbidden - HTTP | MDN

 

728x90