Spring Security Internal Flow
1️⃣ STEP 1: (사용자가 자격 증명 입력)
사용자가 로그인을 위해 자격 증명(예: 사용자 이름과 비밀번호)을 제출합니다.
2️⃣ STEP 2: (Spring Security Filters - Authentication / 스프링 보안 필터 - 인증)
자격 증명이 포함된 요청이 스프링 보안의 필터 체인에 의해 가로채져 인증 프로세스가 시작됩니다.
2️⃣ STEP 3: (Authentication Manager / 인증 관리자)
AuthenticationManager가 인증 프로세스를 관리하며, 올바른 인증 제공자(AuthenticationProvider)로 요청을 전달합니다.
4️⃣ STEP 4: (Authentication Providers / 인증 제공자)
AuthenticationManager는 제공된 자격 증명으로 요청을 인증하는 책임이 있는 하나 이상의 AuthenticationProvider 구현체에게 위임합니다.
5️⃣ STEP 5: (UserDetails Manager/Service)
UserDetailsService가 호출되어 사용자의 세부 정보(예: 역할 및 권한)를 데이터베이스 또는 기타 데이터 소스에서 로드합니다.
6️⃣ STEP 6: (PasswordEncoder / 비밀번호인코더)
PasswordEncoder는 제공된 비밀번호가 사용자에 대해 저장된 비밀번호와 일치하는지 확인하거나 인코딩하는 데 사용됩니다.
7️⃣ STEP 7: (인증 관리자로 돌아감)
AuthenticationProvider 는 인증된 객체를 AuthenticationManager에 반환하여 인증이 성공했음을 나타냅니다.
8️⃣ STEP 8: (스프링 보안 필터로 돌아감)
AuthenticationManager는 사용자가 인증되었음을 나타내어 스프링 보안 필터 체인에 제어를 반환합니다.
9️⃣ STEP 9: (보안 컨텍스트)
인증된 사용자의 세부 정보가 세션의 보안 컨텍스트를 보유하고 있는 SecurityContextHolder에 저장됩니다.
🔟 STEP 10: (사용자)
요청이 대상 리소스(예: 컨트롤러 메서드)로 전달되고 사용자는 애플리케이션의 보안 부분에 접근할 수 있는 권한을 부여받습니다.
☑️ 스프링 보안 필터 (Spring Security Filters)
스프링 보안 필터들은 각 요청을 가로채어 인증이 필요한지 확인합니다. 인증이 필요하면 사용자를 로그인 페이지로 이동시키거나 초기 인증 중 저장된 정보를 사용합니다.
☑️ 인증 (Authentication)
UsernamePasswordAuthenticationFilter와 같은 필터는 HTTP 요청에서 사용자 이름/비밀번호를 추출하여 인증 객체를 준비합니다. 인증은 스프링 보안 프레임워크 내에서 인증된 사용자 정보를 저장하는 핵심 표준입니다.
☑️ 인증 관리자 (AuthenticationManager)
필터에서 요청을 받으면, 사용자 정보의 유효성 검사를 사용 가능한 인증 제공자들에게 위임합니다. 앱 내에 여러 제공자가 있을 수 있으므로, 인증 관리자가 모든 인증 제공자를 관리하는 책임이 있습니다.
☑️ 인증 제공자 (AuthenticationProvider)
인증 제공자는 사용자 정보를 인증하기 위한 핵심 로직을 가지고 있습니다.
☑️ UserDetailsManager/UserDetailsService
UserDetailsManager와 UserDetailsService는 DB/저장 시스템에서 사용자 정보를 검색, 생성, 업데이트, 삭제하는 데 사용이 됩니다.
☑️ PasswordEncoder
비밀번호를 인코딩하고 해싱하는 데 도움이 되는 서비스 인터페이스입니다. 그렇지 않으면 평문 비밀번호로 사용해야 할 수도 있습니다.
☑️ 보안 컨텍스트 (SecurityContext)
요청이 인증되면 인증 정보는 일반적으로 SecurityContextHolder에 의해 관리되는 스레드 로컬 보안 컨텍스트에 저장됩니다. 이는 동일한 사용자로부터의 다가오는 요청을 처리하는 데 사용이 됩니다.
참고자료
https://www.udemy.com/course/spring-security-6-jwt-oauth2-korean
'Spring > Security' 카테고리의 다른 글
Spring Security 6 - (2) (0) | 2024.09.18 |
---|