HTTP 상태 401(Unauthorized) vs 403(Forbidden) 차이

LEE GYUHO·2025년 2월 17일

HTTP 상태 401(Unauthorized) vs 403(Forbidden) 차이

웹 개발을 하다 보면 401 Unauthorized와 403 Forbidden 에러를 마주할 때가 많습니다. 두 상태 코드 모두 "접근 불가"와 관련된 것처럼 보이지만, 실제 의미는 다릅니다. 이 글에서는 401과 403의 차이점을 명확하게 정리하고, 개발할 때 어떻게 처리하면 좋을지 알아보겠습니다.


401 Unauthorized (인증 실패)

의미

401 상태 코드는 클라이언트가 인증되지 않았거나, 잘못된 인증 정보를 제공했을 때 발생합니다.
즉, 서버는 요청을 받았지만 "너 누구야?" 라고 묻는 상황입니다.

언제 발생할까?

  • 로그인되지 않은 사용자가 인증이 필요한 API에 접근하려고 할 때
  • Authorization 헤더에 잘못된 토큰을 포함했을 때
  • Basic Auth에서 잘못된 사용자 이름 또는 비밀번호를 입력했을 때

예시

예시(JWT 인증)

GET /api/user/profile HTTP/1.1
Host: example.com
Authorization: Bearer invalid_token

응답 (401 Unauthorized)

{
  "error": "Unauthorized",
  "message": "Invalid or missing token"
}

--> 올바른 Authorization 토큰을 제공하면 해결됩니다.


403 Forbidden (권한 없음)

의미

403 상태 코드는 클라이언트가 인증되었더라도 해당 리소스에 접근할 권한이 없을 때 발생합니다.
즉, 서버는 클라이언트가 누군지는 알지만, 접근할 권한이 없다고 차단하는 것입니다.

언제 발생할까?

  • 로그인은 했지만, 접근 권한이 부족할 때 (예: 일반 사용자가 관리자 전용 페이지에 접근)
  • 서버에서 특정 IP를 차단했을 때
  • CORS 설정 문제로 인해 요청이 차단되었을 때

예시

예시(권한 부족)

GET /admin/dashboard HTTP/1.1
Host: example.com
Authorization: Bearer valid_user_token

응답 (403 Forbidden)

{
  "error": "Forbidden",
  "message": "You do not have permission to access this resource"
}

--> 관리자 계정으로 로그인해야 접근할 수 있습니다.


비교 정리


개발할 때 어떻게 처리해야 할까?

401 Unauthorized 처리 방법

  • 로그인 페이지로 리다이렉트
  • "로그인이 필요합니다" 메시지 표시
  • 토큰이 만료되었을 경우, 재로그인 요청
if (response.status === 401) {
  alert("로그인이 필요합니다.");
  window.location.href = "/login";
}

403 Forbidden 처리 방법

  • "접근 권한이 없습니다" 메시지 표시
  • 관리자 계정으로 로그인하도록 안내
  • 잘못된 접근을 기록하고 보안 강화
if (response.status === 403) {
  alert("접근 권한이 없습니다.");
}

결론

  • 401 Unauthorized → 로그인하지 않았거나, 잘못된 인증 정보 제공
  • 403 Forbidden → 로그인했지만, 접근 권한이 부족함
profile
누구나 같은 팀으로 되길 바라는 개발자가 되자

0개의 댓글