본문 바로가기

DEVELOPER/CS

[HTTP 상태코드] 401(Unauthorized)과 403(Forbidden) 차이

안녕하세요 백엔드 개발자 제임스입니다. 😎

 

서론


최근 프로젝트를 진행하면서 Security 기술을 다루게 되었습니다. 그러다 보니 상태 코드 401 에러와 403 에러를 자주 접하게 되었습니다. 둘 다 인증/인가와 관련된 상태 코드입니다. 하지만 이 두 상태 코드의 차이를 명확하게 모른 상태입니다. 따라서 자주 혼동하게 되는데요. 그래서 오늘 이 둘의 차이를 정리하려고 합니다.

 

401과 403의 의미


1) HTTP 상태코드 401이란?

401 상태코드의 메시지는 Unauthorized입니다. 우리는 Authorized라 하면은 인가/권한이라고 알고 있습니다. 하지만 401에서는 의미상 '비인증'을 의미한다고 할 수 있습니다. 즉, mdn web docs 문서에 따르면 클라이언트는 요청한 응답을 받기 위해 반드시 인증을 해야 한다는 것입니다.

2) HTTP 상태코드 403이란?

403 상태코드의 메시지는 Forbidden입니다. 403은 클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않다는 의미를 갖고 있습니다. 즉, 403에 경우에는 서버가 클라이언트의 존재를 알고 있다고 할 수 있습니다. 이 의미가 와닿지 않을 수 있습니다. 이제 401과 403의 차이를 직접적으로 비교하면서 더 이해해보도록 하겠습니다.

 

401과 403 에러의 차이


예시로 보이는 API는 어떠한 제품을 등록하는 기능입니다.
이때 관리자의 권한을 가진 유저만이 등록할 수 있는 상황입니다.

1) 인증을 받지 않고 API를 동작시켰을 시

인증없이 API 요청

해당 과정은 인증 없이 API를 요청한 예시입니다. 즉, 로그인을 하지 않은 비회원의 상태로 요청한 것이죠. 따라서 STATUS가 401(Unauthorized)로 출력되는 것을 볼 수 있습니다.

 

1) '관리자 권한이 아닌' 일반 유저의 회원이 API 요청했을 시

이번에는 로그인을 했으나(인증은 되었으나) 관리자 권한이 아닌 일반 유저 권한으로 API를 요청했습니다. 아까와 다르게 403 에러가 출력되는 것을 알 수 있습니다.

 

정리


위 예시를 정리하자면, 401 상태코드는상태 코드는 인증, 403 상태 코드는 권한(인가)과 관련 있습니다.

401 STATUS는 클라이언트가 인증되지 않았거나, 유효한 인증 정보가 부족하여 요청이 거부되었음을 의미합니다. 가령 어떠한 곳에 입장하기 전부터 '입구컷'을 당한 것과 유사합니다. 요약하자면, 401은 클라이언트가 인증되지 않았기 때문에 요청을 정상적으로 처리할 수 없는 상태 코드입니다.

403 STATUS는 서버에서 요청은 받아 들었으나, 잘못된 권한으로 거부함을 의미합니다. 즉, 로그인까지는 된 회원인 것입니다. 그러나 권한이 없어서 거부된 것이죠.

반응형