security
웹 서비스는 누구나 접근할 수 있는 환경 위에서 동작합니다. 따라서 서비스는 요청을 보낸 사용자가 실제로 등록된 사용자이며, 접근 권한이 있는지 식별할 수 있어야 합니다. 이때 사용자의 신원을 확인하는 기본 절차가 바로 인증(Authentication) 입니다.
인증(Authentication) 은 사용자가 "내가 누구인지"를 증명하는 과정입니다. 예를들면, 로그인 시 아이디와 비밀번호를 입력하고 서버가 이를 확인하는 과정을 인증( =사용자의 신원 확인 )이라고 합니다. 인증을 통해 서비스는 사용자를 식별하고, 이후 사용자별 데이터 및 기능 제공이 가능해집니다.
인증이 없다면 다음과 같은 보안 문제가 발생할 수 있습니다.
| 문제 상황 | 위험성 |
|---|---|
| 로그인 없이 다른 사용자 데이터 조회 | 개인정보 유출 |
| 권한 없는 사용자에 의한 데이터 변경 | 서비스 신뢰도 붕괴 |
| 악의적 사용자에 의한 시스템 공격 | 서비스 중단 또는 파괴 |
따라서 인증은 단순 기능이 아니라 보안과 서비스 신뢰성의 핵심 요소입니다.
사실 처음 생각해보면 비밀번호를 함께 보내면, 보안이 지켜진다고 생각할 수 있습니다. 그러나 매 요청마다 비밀번호를 보내면 탈취 위험이 크기 때문에 세션(Session) 또는 JWT(Token) 같은 안전한 인증 수단이 사용됩니다.
| 구분 | 의미 | 질문 | 예시 |
|---|---|---|---|
| 인증(Authentication) | 사용자가 누구인지 확인 | 누구인가? | 로그인 |
| 인가(Authorization) | 해당 사용자가 무엇을 할 수 있는지 확인 | 어떤 권한을 가지는가? | 관리자 페이지 접근 권한 |
가장 큰 차이점은 인증이 되어야 인가 가능하다는 점입니다. 일반 사용자와 admin사용자의 권한이 다르듯 로그인했다고 해서 모든 기능을 사용할 수 있는 것은 아닙니다. 인가에 대해서는 다음 블로그에서 알아봅시다.