살아가는 이유_EU
내가 살아가는 이유, 삶
살아가는 이유_EU
전체 방문자
오늘
어제
  • 삶 (159)
    • 이유's EATERY (16)
      • 맛집 (10)
      • 까페 (4)
      • 맛있는 Recipe (1)
    • 이유's LIFE (16)
      • 국내여행 (5)
      • 해외여행 (2)
      • 운동 (1)
      • 취업정보 (0)
      • 끄적끄적 (5)
      • 일기쟝 (3)
      • 세상 이야기 (0)
      • 결혼 준비 (0)
    • 이유's Programming (43)
      • JavaScript (6)
      • Java (7)
      • C++ (0)
      • DBMS (24)
      • Spring (3)
      • til (1)
      • HTTP (2)
    • 이유's REVIEW (13)
      • BOOK (6)
      • PROGRAM or MOVIE (5)
      • PRODUCT 제품리뷰 (2)
    • 이유's STUDY (31)
      • 수업 관련 (2)
      • IT 시사 (2)
      • IT NEWS (2)
      • IVIEW (0)
      • IOS 앱 만들기 (0)
      • 알고리즘 문제풀이 (23)
      • PM data literacy (2)
    • 이유's ENGLISH (13)
      • Writing about something! (12)
      • Feedback (1)
      • TIL (0)
    • 이유's DB 공부 (1)
      • MySQL DB (0)
      • Postgre (1)
    • Computer 공부 (17)
      • Backend question (10)
      • Clean architecture (2)
      • Operating system (2)
      • Network (3)
      • 항해 (0)

블로그 메뉴

  • 홈
  • EATERY's 맛집
  • CAFE 까페
  • Recipe 레시피
  • IT 공부
  • 방명록
  • 태그

공지사항

인기 글

태그

  • 용인추천
  • memoziation
  • key 로 접근
  • Array로 접근
  • go hand in hand
  • 삼돈식탁
  • 용인맛집
  • 피지오필로소피
  • 흑임자 크림
  • 영어공부
  • 스쿤브레드
  • 스테이크
  • 아메리카토노
  • 묵리
  • 인절미 티라미수
  • 자바스크립트
  • 어게인마이라이프
  • 파스타맛집
  • 고메동 카페
  • 자세요정
  • 용인까페
  • have something to do with
  • 현명하게 리액트
  • React.memo
  • map 하는 법
  • 맛집
  • 고메커피
  • 송계옥
  • have something to do with뜻
  • 렌더링 수 줄이기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
살아가는 이유_EU

내가 살아가는 이유, 삶

Spring security 동작 과정에 대해서 공부
이유's Programming/Spring

Spring security 동작 과정에 대해서 공부

2024. 11. 20. 09:05
728x90
반응형

Spring Security 과정에 대해 공부 

Spring Security는 Spring과는 별개로 작동하는 보안담당 프레임워크입니다. 보안은 모든 웹 애플리케이션의 가장 중요한 측면 중 하나이다. 사용자 데이터를 안전하게 유지하고 무단 접근을 방지하기 위해 개발자는 강력한 보안 조치를 구현해야 한다. 

 

 

기본용어

  • 접근 주체(Principal) : 보호된 리소스에 접근하는 대상
  • 인증(Authentication) : 보호된 리소스에 접근한 대상에 대해 누구인지, 애플리케이션의 작업을 수행해도 되는 주체인지 확인하는 과정(ex. Form 기반 로그인) => 즉, 누구인지?
  • 인가(Authorize) : 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인하는 과정(After Authentication, 인증 이후) => 즉, 어떤 것을 할 수 있는지?
  • 권한 : 어떠한 리소스에 대한 접근 제한, 모든 리소스는 접근 제어 권한이 걸려있음. 인가 과정에서 해당 리소스에 대한 제한된 최소한의 권한을 가졌는지 확인

 

크게 봤을 때 이제 [인증] 과정과 [인가] 과정으로 이루어져 있다. 확인을 해서 진짜 

 

 

1. Authentication (인증)

인증은 사용자의 신원을 확인하는 과정입니다.

1.1 사용자의 요청 처리

  • 사용자가 애플리케이션에 로그인 요청을 보냅니다.
  • 로그인 요청은 Spring Security의 필터 체인(Filter Chain)을 통과합니다. 기본적으로 요청은 UsernamePasswordAuthenticationFilter에서 처리됩니다.

1.2 AuthenticationManager 동작

  • AuthenticationManager는 사용자의 자격 증명을 확인하는 중심 컴포넌트입니다.
  • AuthenticationManager는 실제 인증을 수행하는 AuthenticationProvider에 작업을 위임합니다.
  • 기본적으로 Spring Security는 DaoAuthenticationProvider를 사용하여 데이터베이스와 사용자 인증을 처리합니다.

1.3 UserDetailsService와 UserDetails

  • DaoAuthenticationProvider는 UserDetailsService를 사용하여 사용자의 세부 정보를 로드합니다.
  • UserDetailsService는 사용자 정보를 제공하는 인터페이스입니다. 애플리케이션 개발자는 이를 구현하여 사용자 정보를 DB에서 로드할 수 있습니다.
  • UserDetails는 사용자 이름, 비밀번호, 권한 등 사용자의 세부 정보를 포함하는 객체입니다.

1.4 인증 결과 처리

  • 인증이 성공하면 Spring Security는 인증된 사용자 정보를 SecurityContextHolder에 저장합니다.
  • 인증 실패 시, Spring Security는 예외를 던지거나 적절한 응답을 반환합니다.

2. Authorization (권한 부여)

권한 부여는 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 과정입니다.

인사시스템에서는 이제 

2.1 필터를 통한 요청 검증

  • 사용자가 리소스에 접근하면 요청은 Spring Security의 필터 체인을 다시 통과합니다.
  • AccessDecisionManager는 사용자의 권한과 요청된 리소스의 보안 설정을 비교하여 액세스를 허용할지 결정합니다.

2.2 @PreAuthorize 및 @Secured

  • Spring Security는 메서드 레벨에서 권한을 검사하기 위해 애너테이션 기반 권한 부여를 지원합니다.
    • @PreAuthorize: 메서드 실행 전에 권한을 검사합니다.
    • @Secured: 특정 권한이나 역할을 가진 사용자만 메서드를 호출할 수 있도록 제한합니다.

2.3 SecurityContextHolder 활용

  • 인증 정보는 SecurityContext를 통해 관리되며, SecurityContextHolder를 통해 접근할 수 있습니다.
  • 권한 부여 과정에서 인증된 사용자의 권한 정보가 사용됩니다.

 

3. Spring Security 기본 구성 요소

3.1 Security Filter Chain

  • 모든 HTTP 요청은 Spring Security의 필터 체인을 통과합니다.
  • 주요 필터:
    • UsernamePasswordAuthenticationFilter: 기본 로그인 처리
    • BasicAuthenticationFilter: Basic 인증 처리
    • ExceptionTranslationFilter: 예외 처리
    • FilterSecurityInterceptor: 최종 권한 확인

3.2 Security Config 클래스

Spring Security는 Java Config를 사용하여 설정합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()  // 공용 리소스 허용
                .antMatchers("/admin/**").hasRole("ADMIN")  // 관리자 전용
                .anyRequest().authenticated()  // 그 외 인증 필요
            .and()
            .formLogin()  // 기본 로그인 폼 사용
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password("{noop}password").roles("USER")
            .and()
            .withUser("admin").password("{noop}password").roles("ADMIN");
    }
}

 


4. Spring Security 과정 요약

  1. 사용자가 요청을 보냄.
  2. 요청은 Security Filter Chain을 통과.
  3. 인증이 필요하면 AuthenticationManager에서 인증 수행.
  4. 인증이 성공하면 SecurityContextHolder에 저장.
  5. 리소스 접근 시, 사용자의 권한을 확인하여 요청을 허용하거나 거부.
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'이유's Programming > Spring' 카테고리의 다른 글

JWT token 동작 방법  (0) 2024.11.20
ApacheBenchTest 하는 법  (1) 2024.10.16
    '이유's Programming/Spring' 카테고리의 다른 글
    • JWT token 동작 방법
    • ApacheBenchTest 하는 법
    살아가는 이유_EU
    살아가는 이유_EU
    안녕하세요. 초보개발자의 일상을 담은 블로그입니다.

    티스토리툴바