티스토리 뷰

 

 

 

 

What is Spring Security?

Spring Security는 애플리케이션의 보안 요구사항을 만족하기 위한 스프링 진영 보안 프레임워크 입니다.
Spring Security를 이용해 인증, 권한부여, 세션관리, 암호화, CSRF 방지 등 다양한 보안 기능을 제공합니다.

 


 

 

Core of Security

인증(Authentication)

인증은 서버에서 사용자의 신원을 확인하는 과정으로 Security는 각종 인증 메커니즘을 이용해 사용자의 신원을 확인합니다.

 

 

권한 부여(Authorization)

권한 부여는 인증된 사용자가 특정 리소스에 접근할 수 있는지 확인하는 과정으로,
사용자의 역할과 권한에 따라 서버 리소스에 대한 접근이 제한됩니다.

 

 

주요 클래스

  • AuthenticationManager : 인증 과정을 관리
  • SecurityContext : 인증된 사용자 정보를 저장
  • SecurityContextHolder : 애플리케이션 어디서나 사용자의 SecurityContext에 접근할 수 있도록 지원

 


Features

  • 세션 관리 : Spring Security는 사용자의 세션을 관리, 보호, 만료 등을 처리합니다.
  • CSRF 관리 : 사이트 간 요청 위조 공격을 방지하기 위해 토큰 기반의 방식을 사용합니다.
  • CORS 지원 : 다른 도메인의 리소스에 안전하게 접근할 수 있도록 지원합니다.
  • LDAP, Oauth 2.0, JWT 등 다양한 인증 방식을 지원하며, 다양한 환경에서 사용자 인증 요구 사항을 처리합니다.

 

 

인증과정 구현 방법

종류 구현방식
Filter 기반 인증 Spring Security에서는 여러 인증 필터를 제공하는데,대표적으로 UsernamePasswordAuthenticationFilter를 사용하여 폼 기반으로 인증을 수행합니다. 
사용자의 인증정보를 해당 필터가 직접 AuthenticationManager에 인증을 요청합니다.
Custom 인증 필터 기본으로 제공되는 필터 외에, Custom 필터를 만들어 인증로직을 구현할 수 있습니다. 
특별히 처리되어야할 로직이 있는경우 사용합니다. Custom 필터를 구현후 Spring Security FilterChain에 추가해야합니다.
Pre-authentication 시나리오 이미 외부 시스템(ex. SSO)에 의해 인증된 사용자가 있는 경우, Spring Security는 이 정보를 받아들여 인증과정을 생략하고 바로 권한 부여단계로 넘어갈 수 있습니다.
PreAuthenticatedAuthenticationProvider를 사용하여 시나리오를 처리할 수 있습니다.
프로그래매틱 인증 애플리케이션 특정 부분에 직접 AuthenticationManager를 호출해 인증객체를 생성하고, SecurityContext에 설정하는 방식입니다.
WebFlux 인증 Spring WebFlux를 사용하는 경우 반응형 프로그래밍 모델에 맞는 인증방식을 사용할 수 있습니다. SecurityWebFilterChain을 사용하여 WebFlux환경에서 인증과정을 정의합니다.

 

 

AuthenticationProvider 사용  프로세스

 

AuthentiationProvider 인증과정

 

  1. 클라이언트에서 로그인을 통해 사용자의 아이디와 패스워드를 서버에 인증 요청을 보냅니다.
    • AuthenticationFilter로 처음 요청이 도착합니다.
    • UsernamePasswordAuthenticationToken(Authentication 인터페이스 구현체) 를 발급합니다.
  2. UsernamePasswordAuthenticationToken 발급되면 AuthenticationManager가 이를 처리합니다.
    • AuthenticationManager에 실제 인증을 처리할 AuthenticationProvider를 가지고 있습니다.
  3. AuthenticationProvider 선택
    • AuthenticationManager에 등록된 AuthenticationProvider 중 하나를 선택해 인증처리를 위임합니다.
    • 일반적으로 AuthenticationProvider 인터페이스를 implements 받아 구현합니다.
  4. 사용자 세부 정보 로드
    • AuthenticationProviderUserDetailsService를 사용하여 데이터베이스에 사용자 정보를 조회합니다.
    • 이 때 UserDetailsService 인터페이스를 사용하여, UserDetails 객체(사용자 정보, 권한)를 반환합니다.
  5. 인증 검증
    • 클라이언트에서 요청한 사용자 정보와 UserDetails 객체와 비교하여 검증합니다.
    • 비밀번호 검증은 PasswordEncoder를 사용하여 암호화된 비밀번호를 확인합니다.
  6. 인증 성공
    • 인증이 성공하면, 사용자에 대한 Authentication 객체를 생성하고, 이를 SecurityContext를 저장하여 사요자의 세션 기간 동안 인증 상태를 유지합니다.
    • SecurityContextHolder를 이용하여 Authentication를 저장합니다.

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함