일반적인 웹 사이트의 경우, 회원가입과 로그인은 빠질 수 없는 대표적인 기능이다. 그 중 로그인은 보안과 아주 밀접하게 연관되어 있다. 이번 글에서는 애플리케이션 보안 용어에 대해 알아보도록 하겠다.
인증(Authentication
)과 인가(Authorization
)는 보안 시스템의 두 가지 핵심 개념이다. 두 용어는 비슷하게 들릴 수 있지만, 보안 측면에서 매우 다른 역할을 한다. 아래에서 이 두 개념에 대해 자세히 설명하겠다.
Authentication
)인증(Authentication
)은 사용자가 누구인지 확인하는 과정이라고 할 수 있다. 이는 사용자가 시스템에 접근하기 위해 제공한 자격증명 (아이디, 비밀번호 등)을 검증하는 것을 의미한다.
JWT(Json Web Token)
등을 이용한 인증웹 개발에서는 주로 기본 인증과 토큰 기반 인증(
JWT
)가 사용된다. 특히 JWT는 자주 사용되는 인증 방식인 만큼 추후 자세히 다루도록 하겠다.
Authorization
)인가(Authorization
)는 인증된 사용자가 특정 자원이나 기능에 접근할 권한이 있는지 확인하는 과정이다. 이는 사용자가 무엇을 할 수 있는지 결정하는 것을 의미한다.
스프링 시큐리티는 역할 기반 접근 제어(
RBAC
)를 주로 사용한다.ADMIN
과USER
,GUEST
등 역할에 따라 접근 권한을 부여한다.
구분 | 인증(Authentication) | 인가(Authorization) |
---|---|---|
목적 | 사용자가 누구인지 확인 | 인증된 사용자가 무엇을 할 수 있는지 결정 |
시점 | 시스템에 접근하려고 할 때 | 자원에 접근하려고 할 때 |
데이터 | 사용자명, 비밀번호, 생체 정보 등 | 사용자의 역할, 권한, 정책 등 |
결과 | 사용자가 시스템에 접근할 수 있는지 여부 결정 | 사용자가 특정 자원에 접근할 수 있는지 여부 결정 |
예시 | 로그인 폼, 지문 인식 | 관리자 페이지 접근, 특정 파일 편집 |
Principal
)란?접근 주체(principal
)는 말 그대로 애플리케이션의 기능을 사용하는 주체를 의미한다. 이는 사용자일 수도 있고, 디바이스나 시스템일 수도 있다. 접근 주체는 애플리케이션에 접근하여 자원을 요청하고, 그 요청에 대해 애플리케이션은 인증과 인가 과정을 통해 접근 주체의 신뢰성과 권한을 확인한다.
접근 주체는 애플리케이션에서 자원에 접근하려는 주체로서, 다음과 같은 역할을 수행한다.
스프링 시큐리티는 접근 주체를 관리하고 인증 및 인가를 처리하는 강력한 기능을 제공한다.
스프링 시큐리티는 인증 과정에서 접근 주체의 정보를 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() {
// 관리자만 접근할 수 있는 기능
}
}
접근 주체는 애플리케이션의 기능과 자원에 접근하려는 모든 주체를 의미하며, 이를 관리하고 보호하기 위해 인증과 인가 과정을 거친다. 스프링 시큐리티는 이러한 과정을 효율적으로 처리할 수 있는 다양한 기능을 제공한다.