728x90

사이드 프로젝트를 진행하면서 두 개념에 대해 명확하게 구분되어 동작 해야 하는 로직이 있어서 개념 정리 겸 한번 적어본다.

 

1. 인증(Authentication)이란?

인증은 사용자가 누구인지 확인하는 과정입니다. 예를 들어, 웹 애플리케이션에 로그인할 때 아이디와 비밀번호를 입력하는 것이 바로 인증의 대표적인 예시이다. 이 과정에서 시스템은 사용자가 주장하는 정체성(아이디)이 실제로 맞는지 검증한다.

 

쉽게 말해 인증(Authentication)은 공항에서 입국 심사정도로 보면 된다. 신원확인(?)정도로 이해하면 편할 것이다.

 

인증도 방법이 여러가지가 있다.( 아래 방법 외에도 여러가지가 있지만 대표적인것들만 적어본다.)

  1. 아이디와 비밀번호: 가장 일반적인 방식으로, 아이디와 비밀번호를 통해 사용자를 식별.
  2. 2단계 인증 (2FA): 비밀번호 외에 SMS 코드, 이메일, OTP 등의 추가 인증을 요구.
  3. 생체 인식: 지문, 홍채, 안면 인식 등을 통해 사용자를 식별.
  4. OAuth: 구글, 페이스북 등 외부 인증 서비스 제공자를 통한 인증.

그 다음은 인가(Authorization)이다.

 

2. 인가(Authorization)란?

인가는 사용자가 어떤 자원에 접근할 수 있는지를 결정하는 과정이다. 인증을 통해 사용자가 누구인지 확인했다면, 인가를 통해 해당 사용자가 무엇을 할 수 있는지를 판단한다. 

 

이것도 쉽게 해석하자면 비행기 탑승 수속정도로 이해하면 된다. 이 사람이 비행기에 탑승이 가능한지 아니면 다른 비행기로 가거나 탑승이 불가한지 확인 하는 과정이다.

 

인가(Authorization) 의 대표적인 방식이다.

 

  1. Role-Based Access Control (RBAC)
    • 사용자의 역할(Role)을 기준으로 접근 권한을 설정하는 방식.
    • 예: ROLE_ADMIN, ROLE_USER
  2. Attribute-Based Access Control (ABAC)
    • 시간, 위치, 리소스 타입 등의 속성을 기반으로 접근을 제어.
    • 예: 특정 시간대에만 접근 허용, 특정 IP 주소에서만 접근 가능.
  3. Policy-Based Access Control
    • 사전 정의된 정책(Policy)을 기반으로 권한을 제어.
    • 예: 조직 내의 규칙 또는 규정에 따른 접근 허용/제한.

보면 명확하게 구분이 된다. 인증은 그 주체가 맞는지 검증을 하는 것이고 인가는 특정 주체의 접근성에 대해서 검증을 하는 과정이다.

 

 

정리

인증(Authentication)과 인가(Authorization)는 웹 애플리케이션의 보안에서 매우 중요한 두 가지 개념이다. 인증은 사용자의 신원을 확인하는 과정이고, 인가는 사용자의 권한을 확인하여 자원 접근을 제어하는 과정이다. 이 두 요소를 올바르게 설계하고 구현함으로써 애플리케이션의 보안을 한층 강화할 수 있다. 

본인이 인증,인가 관련 서비스를 운영하거나 구현 하는게 아니더라도 꼭 알고 있어야한다.

 

728x90