1. 인증(Authentication)이란?
인증은 사용자가 주장하는 신원을 검증하는 과정입니다. 즉, 사용자가 제공하는 자격 증명(예: 사용자명, 비밀번호, 토큰 등)을 확인하여 실제 등록된 사용자와 일치하는지를 판별합니다. 이 과정을 통해 시스템은 사용자가 누구인지 확인하고, 이후 인가(authorization) 과정을 통해 해당 사용자가 요청한 자원에 접근할 수 있는 권한이 있는지 결정합니다.
2. 전통적인 웹 애플리케이션에서의 인증 플로우
A. 로그인 요청
- 사용자 입력:
사용자가 HTML 폼을 통해 사용자명과 비밀번호 등 자격 증명을 입력합니다. - 요청 전송:
브라우저는 로그인 폼의 데이터를 HTTP POST 방식으로 서버에 전송합니다.
B. 인증 필터 및 토큰 생성
- Authentication Filter:
Spring Security에서는 UsernamePasswordAuthenticationFilter와 같은 필터가 로그인 요청을 가로채어, 입력된 자격 증명을 추출합니다. - Authentication Token 생성:
이 필터는 자격 증명을 기반으로 UsernamePasswordAuthenticationToken과 같은 토큰 객체를 생성하여, 이를 AuthenticationManager에 전달합니다.
C. 인증 관리자(Authentication Manager)와 제공자(Authentication Provider)
- Authentication Manager:
전달받은 인증 토큰을 처리하는 중앙 컴포넌트입니다. 내부적으로 여러 AuthenticationProvider를 사용하여 인증을 위임합니다. - Authentication Provider:
예를 들어, DaoAuthenticationProvider는 UserDetailsService를 이용하여 데이터베이스나 인메모리에서 사용자 정보를 로드한 후, 입력된 비밀번호와 저장된 비밀번호(보통 암호화된 값)를 비교합니다. 비밀번호 검증 시에는 PasswordEncoder (예: BCryptPasswordEncoder)를 사용하여 보안을 강화합니다.
D. 인증 성공 및 Security Context
- 인증 성공 시:
인증이 성공하면, AuthenticationManager는 인증된 Authentication 객체(예: UsernamePasswordAuthenticationToken의 인증 버전)를 반환합니다. - SecurityContextHolder:
반환된 인증 객체는 SecurityContextHolder에 저장되어, 애플리케이션 전반에서 현재 인증된 사용자 정보를 참조할 수 있게 됩니다. - 세션 저장:
전통적인 웹 애플리케이션에서는 이 인증 정보를 HTTP 세션에 저장하여, 이후의 요청에서도 인증 상태를 유지할 수 있습니다.
E. 인증 실패
- 인증 실패 처리:
인증에 실패하면 예외가 발생하고, 로그인 페이지로 다시 리다이렉트되거나, 에러 메시지가 표시됩니다.
3. Spring Security에서의 인증 매커니즘 구성 요소
Spring Security는 위의 인증 플로우를 체계적으로 구현하기 위해 다양한 구성 요소들을 제공합니다.
A. SecurityFilterChain
- 역할:
HTTP 요청을 가로채어 인증, 인가, 로그아웃 등의 보안 처리를 담당하는 필터 체인을 구성합니다. - 구성:
각 요청은 여러 필터를 거치게 되며, 그 중 인증 필터가 사용자의 자격 증명을 확인하고, 인증 성공 시 SecurityContext에 저장합니다.
B. AuthenticationManager 및 AuthenticationProvider
- AuthenticationManager:
여러 AuthenticationProvider를 포함하며, 인증 요청을 위임받아 처리합니다. - AuthenticationProvider:
실제 사용자 정보 조회와 비밀번호 검증 등을 담당합니다. 예를 들어, DaoAuthenticationProvider는 UserDetailsService를 사용합니다.
C. UserDetailsService와 UserDetails
- UserDetailsService:
사용자 정보를 조회하는 역할을 하며, 인메모리, 데이터베이스, LDAP 등 다양한 구현체가 있습니다. - UserDetails:
조회된 사용자 정보를 담는 객체로, 사용자명, 암호, 권한 목록 등을 포함합니다.
D. PasswordEncoder
- 역할:
평문 비밀번호를 안전하게 암호화하고, 인증 시 암호화된 비밀번호와 비교하는 역할을 합니다. - 예시:
BCryptPasswordEncoder, Argon2PasswordEncoder 등
4. 많이 사용되는 인증 기능 및 추가 기능
A. 폼 기반 인증(Form-Based Authentication)
- 설명:
HTML 폼을 통해 자격 증명을 입력받아 인증하는 가장 전통적인 방식입니다. - 특징:
기본 로그인 페이지 또는 커스텀 로그인 페이지를 사용할 수 있으며, 인증 성공 후 특정 URL로 리다이렉트할 수 있습니다.
B. HTTP Basic 및 Digest 인증
- 설명:
HTTP 헤더에 사용자명과 비밀번호를 포함하여 인증하는 방식입니다. - 특징:
간단하지만 브라우저에서 기본 팝업을 사용하며, 보안상 HTTPS와 함께 사용해야 합니다.
C. OAuth2 및 OpenID Connect
- 설명:
외부 인증 제공자(예: 구글, 페이스북, GitHub 등)를 이용하여 인증하는 방식입니다. - 특징:
SSO(Single Sign-On)를 지원하며, 토큰 기반 인증 방식을 사용합니다.
D. JWT(Json Web Token) 인증
- 설명:
인증된 사용자 정보를 JSON Web Token에 담아 클라이언트와 서버 간에 전달하는 방식입니다. - 특징:
상태를 저장하지 않는(stateless) 인증 방식으로, REST API 등에서 많이 사용됩니다.
E. Remember-me 기능
- 설명:
사용자가 로그인 상태를 유지하도록 하는 기능으로, 장기적인 쿠키를 사용하여 재인증 없이 접근할 수 있도록 합니다. - 특징:
세션이 만료되더라도 사용자를 기억하여 자동 로그인을 지원합니다.
F. 다중 인증 (Multi-factor Authentication, MFA)
- 설명:
단순한 비밀번호 외에 추가적인 인증 요소(예: OTP, SMS, 앱 기반 인증 등)를 요구하는 방식입니다. - 특징:
보안 수준을 높이기 위해 사용되며, 민감한 서비스나 금융 서비스에서 많이 적용됩니다.
G. 세션 관리 및 동시 세션 제어
- 설명:
사용자의 세션을 관리하고, 동일 계정으로 동시에 로그인할 수 있는 세션 수를 제한하는 기능입니다. - 특징:
세션 고정 공격 방지 및 리소스 관리를 위해 중요합니다.
5. 요약
- 인증의 기본 원리:
사용자가 제공한 자격 증명을 검증하여 신원을 확인하는 과정이며, 이를 통해 시스템은 사용자의 권한을 판단합니다. - 인증 플로우:
사용자 입력 → 인증 필터 → AuthenticationManager 및 AuthenticationProvider를 통한 검증 → SecurityContextHolder에 저장 → 이후 요청 처리 - Spring Security 구성 요소:
SecurityFilterChain, AuthenticationManager, AuthenticationProvider, UserDetailsService, PasswordEncoder 등으로 구성되며, 이들 간의 협력을 통해 인증을 처리합니다. - 자주 사용되는 기능:
폼 기반 인증, HTTP Basic 인증, OAuth2/OpenID Connect, JWT, Remember-me, MFA, 세션 관리 등 다양한 기능을 통해 다양한 요구 사항에 대응할 수 있습니다.
이와 같이, 인증 매커니즘은 단순한 자격 증명 검증을 넘어서 다양한 보안 위협에 대응할 수 있는 여러 기능들을 포함하며, Spring Security는 이를 모듈화된 방식으로 구현할 수 있도록 지원
'Spring > Spring Securitiy' 카테고리의 다른 글
8. Spring AuthenticationProvider 개요 (0) | 2025.02.21 |
---|---|
7. 6.1버전 전에 구현되었던 SecurityConfig 리펙토링 (0) | 2025.02.14 |
5. Spring Security 6 버전 기준 이전 방식(WebSecurityConfigurerAdapter 사용)과 최신 방식(SecurityFilterChain 사용) 비교 (0) | 2025.01.23 |
4. SecurityConfig 기본 사항 (0) | 2025.01.22 |
3. 필터 체인에서 자주 사용되는 시큐리티(보안) 필터 간단하게 정리 (1) | 2025.01.21 |