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