SpringSecurity
spring security는 인증과 인가에 초점을 맞춘 프레임워크이다.
- 인증(Authentication): 해당 사용자가 본인이 맞는지를 확인하는 절차
- 인가(Authorization): 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차
스프링 시큐리티의 특징
- 서블릿 api 통합
- spring web mvc와의 선택적 통합
- 인증과 권한 부여를 모두 포괄적이고 확장 가능한 지원
- 세션 고정, clickjacking, 사이트 간 요청 위조 등과 같은 공격으로부터 보호
▶ 웹 기반 인증과 인가를 편하게 구현하기 위함.
spring security Filter
필터가 굉장히 많아서 우리에게 필요한 필터만 골라 구현해 사용한다.
로그인 인증 구조
- 사용자가 아이디 비밀번호로 로그인을 요청, 로그인 시도하면 http request 들어온다.
- AuthenticationFilter에서 UsernamePasswordAuthenticationToken을 생성하여 AuthenticaionManager에게 전달.
- AuthenticaionManager는 등록된 AuthenticaionProvider(들)을 조회하여 인증을 요구함
- AuthenticaionProvider는 UserDetailsService를 통해 입력받은 아이디에 대한 사용자 정보를 DB에서 조회함.
- 입력받은 비밀번호를 암호화하여 DB의 비밀번호화 매칭되는 경우 인증이 성공된 UsernameAuthenticationToken을 생성하여 AuthenticaionManager로 반환함
- AuthenticaionManager는 UsernameAuthenticaionToken을 AuthenticaionFilter로 전달함
- AuthenticationFilter는 전달받은 UsernameAuthenticationToken을 LoginSuccessHandler로 전송하고, SecurityContextHolder에 저장함
security의 주요 필터
- SecurityContextRersistenceFilter
SecurityContext를 Load/Save
- LogoutFilter
로그아웃 URL로의 요청을 감시하여 해당 사용자를 로그아웃 시킴.
- UsernamePasswordAuthenticationFilter
ID/비밀번호 기반 Form 인증요청 URL을 감시하여 사용자를 인증.
- ExceptionTransitionFilter
요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달.
- FilterSecurityInterceptor
접근 권한 확인을 위해 요청을 AccessDecisionManager로 위임. 이 필터가 실행되는 시점에는 사용자가 인증됐다고 판단
* 느낀점
내용이 어렵다... 단순히 로그인에서 사용하는 보안 관련된 내용이라고만 생각했는데 그것보단 더 어려웠다.... 나중에 부실한 내용을 보완해야겠다.
반응형
'Spring' 카테고리의 다른 글
PUT과 PATCH의 차이점 (0) | 2023.02.19 |
---|---|
spring security - 인증 방식에 따른 차이 (세션과 토큰방식) (0) | 2023.01.03 |
WelcomePage란? (0) | 2022.12.11 |
API란 무엇인가 (+REST API) (0) | 2022.11.22 |
MVC패턴과 MVC패턴을 지키는 법 (0) | 2022.10.20 |