AuthenticationFilter:
/login)을 가장 먼저 가로채는 필터입니다.Authentication 객체(주로 UsernamePasswordAuthenticationToken)를 생성합니다.AuthenticationManager에게 전달하여 인증을 위임합니다.AuthenticationManager:
AuthenticationProvider들 중에서 현재 요청을 처리할 수 있는 적절한 Provider를 찾아 인증을 위임합니다.AuthenticationProvider:
UserDetailsService를 통해 DB 등에서 사용자 정보를 가져오고, PasswordEncoder를 통해 비밀번호를 비교합니다.Authentication 객체를 생성하여 AuthenticationManager에게 반환합니다.SecurityContextHolder:
AuthenticationManager로부터 인증 완료된 Authentication 객체를 돌려받은 AuthenticationFilter는, 이 객체를 SecurityContextHolder에 저장합니다.SecurityContextHolder는 ThreadLocal을 사용하여 현재 스레드 내에서 인증 정보를 공유하므로, 이후 애플리케이션의 어느 곳에서든 현재 로그인된 사용자 정보에 접근할 수 있게 됩니다.UserDetailsService(사용자 정보를 가져오는 방법)와 PasswordEncoder(비밀번호를 비교하는 방법)입니다.OAuth2: "인가(Authorization)"를 위한 프로토콜입니다. 사용자가 특정 서비스(Client)에게, 자신의 계정이 있는 다른 서비스(Resource Server, e.g., Google)의 특정 자원(e.g., 프로필 정보)에 접근할 수 있는 권한을 부여하는 과정을 표준화한 것입니다.
OpenID Connect (OIDC):
POST, PUT, DELETE와 같은 "실제 요청(Actual Request)"을 보내기 전에, 브라우저는 먼저 OPTIONS HTTP 메서드를 사용하여 서버에 "이러한 요청을 보내도 괜찮은지"를 물어보는 사전 요청(Preflight Request)을 보냅니다.OPTIONS 요청의 헤더에는 Access-Control-Request-Method (실제 요청의 메서드), Access-Control-Request-Headers (실제 요청의 헤더) 등이 포함됩니다.Access-Control-Allow-Origin, Access-Control-Allow-Methods 등의 헤더를 담아 응답해야 합니다. 브라우저는 이 응답을 보고, 실제 요청을 보낼지 말지를 결정합니다.Synchronizer Token Pattern (CSRF 토큰):
SameSite Cookie Attribute:
SameSite=Strict 또는 SameSite=Lax로 설정하면 대부분의 CSRF 공격을 효과적으로 방어할 수 있습니다.Referer 헤더 검증:
Referer 헤더를 확인하여, 허용된 도메인에서 온 요청인지를 검증하는 방식. (단, Referer 헤더는 위조될 수 있어 보조적인 수단으로 사용)Authorization 헤더를 통해 전달하는 Stateless 인증 방식에서는, 브라우저가 인증 정보를 자동으로 보내지 않으므로 CSRF 공격에 대해 기본적으로 안전합니다.csrf().disable())합니다.SameSite 속성 설정 등의 추가적인 방어책이 필요합니다.Filter → AuthenticationManager → AuthenticationProvider 순서로 책임이 위임되며, 최종 인증 정보는 SecurityContextHolder에 저장됩니다.OPTIONS)가 먼저 발생합니다.