1. 인증ㆍ인가

(1) 인증과 인가

서비스를 사용하다 보면 회원가입과 로그인을 자주 접하게 될 것이다. 회원가입과 로그인을 구현할 때 가장 핵심이 되는 내용이 바로 인증과 인가이다.
프론트엔드 개발에서 인증(Authentication)과 인가(Authorization)는 보안과 관련된 매우 중요한 개념이다. 이 두 과정은 웹 애플리케이션에서 사용자의 신원을 확인하고, 적절한 권한을 가진 사용자만 특정 리소스나 기능에 접근하도록 제한하는 역할을 한다. 이 둘은 종종 혼동되기도 하지만, 분명하게 각각의 역할이 다르며, 각각의 과정에서 발생할 수 있는 보안 리스크도 다르다. 또한, 제대로 된 인증 및 인가 처리가 이루어지지 않으면 민감한 정보가 유출되거나 악의적인 사용자가 애플리케이션에 접근할 수 있다. 그럼 지금부터 인증과 인가에 대해 알아보도록 하자.

1) 인증(Authentication)

인증사용자가 누구인지를 확인하는 과정이다. 일상생활에서 주민등록증을 통해 신분을 입증하는 것과 같이 "당신이 누구인가?"를 묻는 단계이다. 인증을 통해 시스템은 사용자가 자신이 주장하는 인물이 맞는지 확인하게 된다. 인증에 대한 과정은 아래와 같다.
로그인 시나리오로 보는 토큰을 이용한 인증
로그인 시나리오로 보는 토큰을 이용한 인증
  1. 사용자 입력: 사용자는 사용자 이름(또는 이메일)과 비밀번호를 입력
  1. 서버 요청: 웹 브라우저는 이 정보를 서버에 전달하여 요청
  1. 서버 검증: 서버는 데이터베이스에 저장된 정보와 사용자가 입력한 정보를 비교. 똑같다, 사용자는 인증
  1. 토큰 발급: 성공적인 인증 후, 서버는 인증 토큰(예: JWT)을 발급 (이 토큰은 사용자가 이후의 요청에서 자신의 신원을 증명하는 데 사용됨)
  1. 토큰 저장: 웹 브라우저는 이 토큰을 로컬 스토리지, 세션 스토리지, 또는 쿠키에 저장
인증은 애플리케이션이 신뢰할 수 있는 사용자인지를 결정하는 첫 번째 단계로, 일반적으로 사용자명과 비밀번호, 소셜 로그인, 2단계 인증 등의 방식으로 이루어진다.

2) 인가(Authorization)

인가인증된 사용자가 특정 리소스나 기능에 접근할 수 있는 권한이 있는지를 확인하는 과정이다. 즉, "당신이 무엇을 할 수 있는가?"를 묻는 단계다. 관계자 외 출입 금지와 비슷한 맥락이라고 보면 된다. 인가에 대한 대략적인 과정은 아래와 같다.
비공개 글 열람 시나리오로 보는 인가의 과정
비공개 글 열람 시나리오로 보는 인가의 과정
  1. 비공개 글 열람 요청: 인증된 사용자가 비공개 글을 열람하려고 시도
  1. 사용자의 권한 확인: 서버는 사용자가 글을 열람할 수 있는 권한이 있는지 확인 (사용자가 관리자이거나 글 작성자인지 확인)
  1. 인가 결정: 권한이 있으면 인가가 성공하여 사용자는 글을 열람할 수 있으나, 권한이 없으면 인가가 실패하여 접근이 차단됨
위와 같이, 인가는 인증된 사용자가 애플리케이션 내에서 어떤 기능을 사용할 수 있는지, 혹은 어떤 데이터에 접근할 수 있는지 결정하는 과정이다. 이때, 모든 사용자가 모든 기능에 접근할 수 있도록 허용하면 보안 리스크가 커지므로, 권한을 가진 사용자만 중요한 데이터에 접근할 수 있도록 제한하는 것이 좋다.
 

(2) 인증과 인가의 중요성

앞서 인증과 인가는 프론트엔드 개발에서의 보안과 관련된 매우 중요한 개념이라고 했다. 그렇다면 인증과 인가는 왜 중요한 것일까? 지금부터 그에 대해 알아보자.
프론트엔드에서 인증인가는 사용자 경험과 보안 측면에서 매우 중요하다. 사용자가 인증을 통해 애플리케이션에 로그인하고, 인가를 통해 올바른 권한으로 필요한 리소스에 접근할 수 있어야 한다.
만약 인증이 잘못 처리되면 누구나 애플리케이션에 접근할 수 있게 되어 불법적인 사용이나 데이터 유출 등의 보안 문제가 발생할 수 있다. 또한, 신뢰할 수 없는 사용자들이 중요한 기능을 이용하게 되면서 애플리케이션의 운영에 심각한 지장을 초래할 수 있다.
또한, 인가가 제대로 적용되지 않으면 권한이 없는 사용자가 민감한 정보나 중요한 기능에 접근할 수 있어 보안 문제가 발생할 수 있다. 예를 들어, 일반 사용자가 관리자 기능에 접근하거나, 제한된 데이터에 접근하게 되는 경우 심각한 결과를 초래할 수 있다.