13.1 인증(Authentication)과 인가(Authorization)

김찬미·2024년 7월 1일
0

인증과 인가란?

일반적인 웹 사이트의 경우, 회원가입과 로그인은 빠질 수 없는 대표적인 기능이다. 그 중 로그인은 보안과 아주 밀접하게 연관되어 있다. 이번 글에서는 애플리케이션 보안 용어에 대해 알아보도록 하겠다.

인증(Authentication)인가(Authorization)는 보안 시스템의 두 가지 핵심 개념이다. 두 용어는 비슷하게 들릴 수 있지만, 보안 측면에서 매우 다른 역할을 한다. 아래에서 이 두 개념에 대해 자세히 설명하겠다.

인증(Authentication)

인증(Authentication)은 사용자가 누구인지 확인하는 과정이라고 할 수 있다. 이는 사용자가 시스템에 접근하기 위해 제공한 자격증명 (아이디, 비밀번호 등)을 검증하는 것을 의미한다.

인증 과정

  1. 자격 증명 제출: 사용자는 사용자명과 비밀번호 또는 기타 인증 정보를 시스템에 제출한다.
  2. 검증: 시스템은 제출된 자격 증명이 올바른지 확인한다.
  3. 인증 성공/실패: 자격 증명이 올바르면 사용자는 인증되고, 그렇지 않으면 접근이 거부된다.

인증 유형

  • 기본 인증: 사용자명과 비밀번호를 사용한 인증
  • 다중 요소 인증(MFA): 두 개 이상의 독립적인 인증 요소를 사용하는 인증
  • 생체 인증: 지문, 얼굴 인식 등을 이용한 인증
  • 토큰 기반 인증: JWT(Json Web Token) 등을 이용한 인증

웹 개발에서는 주로 기본 인증토큰 기반 인증(JWT)가 사용된다. 특히 JWT는 자주 사용되는 인증 방식인 만큼 추후 자세히 다루도록 하겠다.

예시

  • 웹사이트 로그인 폼에 사용자명과 비밀번호 입력
  • 모바일 앱에서 지문 인식 사용

인가(Authorization)

인가(Authorization)는 인증된 사용자가 특정 자원이나 기능에 접근할 권한이 있는지 확인하는 과정이다. 이는 사용자가 무엇을 할 수 있는지 결정하는 것을 의미한다.

인가 과정

  1. 권한 확인: 사용자가 요청한 자원에 접근할 수 있는 권한이 있는지 확인한다.
  2. 접근 허용/거부: 사용자가 적절한 권한을 가지고 있으면 접근이 허용되고, 그렇지 않으면 접근이 거부된다.

인가 유형

  • 역할 기반 접근 제어(RBAC): 사용자의 역할에 따라 접근 권한을 부여
  • 속성 기반 접근 제어(ABAC): 사용자의 속성(예: 부서, 직위 등)에 따라 접근 권한을 부여
  • 정책 기반 접근 제어(PBAC): 특정 정책에 따라 접근 권한을 부여

스프링 시큐리티는 역할 기반 접근 제어(RBAC)를 주로 사용한다. ADMINUSER, GUEST등 역할에 따라 접근 권한을 부여한다.

예시

  • 관리자는 모든 사용자 데이터를 볼 수 있지만, 일반 사용자는 자신의 데이터만 볼 수 있음
  • 특정 부서의 직원만 해당 부서의 문서를 편집할 수 있음

인증과 인가의 차이점

구분인증(Authentication)인가(Authorization)
목적사용자가 누구인지 확인인증된 사용자가 무엇을 할 수 있는지 결정
시점시스템에 접근하려고 할 때자원에 접근하려고 할 때
데이터사용자명, 비밀번호, 생체 정보 등사용자의 역할, 권한, 정책 등
결과사용자가 시스템에 접근할 수 있는지 여부 결정사용자가 특정 자원에 접근할 수 있는지 여부 결정
예시로그인 폼, 지문 인식관리자 페이지 접근, 특정 파일 편집

접근 주체(Principal)란?

접근 주체(principal)는 말 그대로 애플리케이션의 기능을 사용하는 주체를 의미한다. 이는 사용자일 수도 있고, 디바이스나 시스템일 수도 있다. 접근 주체는 애플리케이션에 접근하여 자원을 요청하고, 그 요청에 대해 애플리케이션은 인증과 인가 과정을 통해 접근 주체의 신뢰성과 권한을 확인한다.

접근 주체(Principal)의 역할

접근 주체는 애플리케이션에서 자원에 접근하려는 주체로서, 다음과 같은 역할을 수행한다.

  • 인증(Authentication) 대상: 접근 주체는 애플리케이션에 접근하기 위해 자격 증명을 제공해야 한다. 이는 주로 사용자명과 비밀번호, 인증 토큰, 또는 디바이스 인증 정보 등을 포함한다.
  • 인가(Authorization) 대상: 인증이 성공한 후, 접근 주체는 특정 자원이나 기능에 접근할 권한이 있는지 확인된다. 이는 역할, 권한, 정책 등을 통해 결정된다.

접근 주체의 예시

  1. 사용자(User): 애플리케이션을 사용하는 일반적인 인간 사용자.
    • 예: 웹사이트에 로그인하는 사용자
  2. 디바이스(Device): 특정 기능을 수행하거나 데이터를 전송하는 하드웨어 장치.
    • 예: 스마트홈 시스템의 센서
  3. 시스템(System): 다른 시스템이나 애플리케이션이 자원에 접근하는 경우.
    • 예: 마이크로서비스 아키텍처에서 다른 서비스가 API에 접근하는 경우

스프링 시큐리티(Spring Security)에서의 접근 주체

스프링 시큐리티는 접근 주체를 관리하고 인증 및 인가를 처리하는 강력한 기능을 제공한다.

인증 과정에서의 접근 주체

스프링 시큐리티는 인증 과정에서 접근 주체의 정보를 Authentication 객체로 관리한다. 이 객체는 현재 인증된 사용자의 세부 정보를 포함한다.

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

public void someMethod() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    String currentPrincipalName = authentication.getName();
}

인가 과정에서의 접근 주체

인가 과정에서는 접근 주체의 권한을 확인하여 자원에 대한 접근을 허용하거나 거부한다. 스프링 시큐리티는 역할 기반 접근 제어(RBAC)를 통해 이를 구현할 수 있다.

import org.springframework.security.access.prepost.PreAuthorize;

@Service
public class SomeService {

    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public void adminOnlyMethod() {
        // 관리자만 접근할 수 있는 기능
    }
}

요약

  • 접근 주체(Principal): 애플리케이션에 접근하여 자원을 요청하는 주체.
  • 인증(Authentication) 대상: 자격 증명을 통해 신원을 확인받는 과정.
  • 인가(Authorization) 대상: 인증된 주체가 자원에 접근할 권한이 있는지 확인하는 과정.

접근 주체는 애플리케이션의 기능과 자원에 접근하려는 모든 주체를 의미하며, 이를 관리하고 보호하기 위해 인증과 인가 과정을 거친다. 스프링 시큐리티는 이러한 과정을 효율적으로 처리할 수 있는 다양한 기능을 제공한다.

profile
백엔드 개발자

0개의 댓글

관련 채용 정보