인증과 인가 왜 헷갈리는가

김지섭·2024년 3월 25일
0

분명히 인증과 인가에 대한 개념을 잘 알고있다고 생각했지만, 소통을 하다 보면 이 내용과 관련하여 miscommunication이 발생하는 상황이 발생하곤 합니다. 간단한 개념인데 어쩌다가 이러한 문제가 발생했는지 고민하던 도중 별 것은 아니지만 몇가지 알게 된 것이 있어 글로 정리해보고자 합니다.

단어 정의

  • 인증(Authentication): 단순히 사용자가 누구인지 확인하는 과정입니다. 이 과정에서는 사용자가 자신이 주장하는 사람이라는 것을 증명해야 합니다. 이는 보통 로그인 과정에서 이메일과 비밀번호를 통해 이루어집니다.

  • 인가(Authorization): 해당 사용자가 특정 자원에 접근하거나 특정 작업을 수행할 수 있는 권한이 있는지 확인하는 과정입니다. 사용자가 인증을 완료한 후, 시스템은 사용자의 권한을 확인하여 특정 자원에 대한 접근을 허용하거나 거부할 수 있습니다.

HTTP 상태 코드 401, 403

HTTP 규격에 따르면, 각각의 의미는 다음과 같습니다.

  • 401 Unauthorized: 요청된 자원에 대한 유효한 인증 자격증명이 없을 때 반환됩니다. 즉, 서버가 요청을 이해했지만, 요청을 처리하기 전에 사용자의 신원을 검증하는 단계가 필요함을 나타냅니다.

  • 403 Forbidden: 서버가 요청을 이해했으나, 사용자가 요청한 작업을 수행할 권한이 없을 때 반환됩니다. 여기서 중요한 점은 사용자의 신원이 이미 확인되었으나, 인증된 사용자에게 필요한 권한이 없다는 것입니다.

헷갈리는 이유

일반적으로 인증에 대한 구현은 코드베이스 초반에만 다루고, 이후에는 모든 인가 시스템을 auth로 통일하여 작업하는 경우가 종종 있습니다. 이러한 경우 자연스럽게 잊게 될 가능성이 있습니다.

또한, 인증(Authentication) 오류에는 401 Unauthorized, 인가(Authorization) 거절시에는 403 Forbidden를 사용하는데, Authentication 오류에 Unauthorized 코드를 반환한다는 점에서 소통상에 문제가 발생할 수 있는 여지가 있습니다.

각종 프레임워크나 라이브러리에서 HTTP 상태 코드를 숫자가 아닌 열거형(enum)으로 다루는 경우가 많은데, 인증 오류를 계속하여 Unauthorized로 인식하다보니, 인증 = Authorization과 같은 인지상의 오류를 범하게 됩니다.

이 글을 통해 인증과 인가의 개념과, HTTP 프로토콜에서의 차이에 대해서 이해하고, 소통에 있어서 도움이 됐으면 좋겠습니다.

0개의 댓글

관련 채용 정보