Security 로그인
스프링 프레임워크에서 로그인을 한다는 것은 authenticated 가 true인 Authentication 객체를 SecurityContext 에 갖고 있는 상태를 말합니다. 단 Authentication이 AnonymousAuthenticationToken ( 다른 사용자 )만 아니면 됩니다.
Authentication (인증)의 기본 구조
인증 토큰 (Authentication)을 제공하는 필터들 | |
UsernamePasswordAuthenticationFilter | 폼 로그인 (아이디/패스워드 로그) |
RememberMeAuthenticationFilter | 자동로그인이 선택 되어있다면, 쿠키 로그인 |
AnonymousAuthenticationFilter | 로그인 인증이 되어있지 않았다는 것을 확인함 |
SecurityContextPersistenceFilter | 기존 로그인을 유지함 |
BearerTokenAuthenticationFilter | JWT 로그인 |
BasicAuthenticationFilter ⭐ | ajax 로그인 |
OAuth2LoginAuthenticationFilter | 소셜 로그 |
OpenIDAuthenticationFilter | OpenID 로그인 |
Saml2WebSsoAuthenticationFilter | SAML2로그인 |
Authentication 정보
- Set<GrantedAuthority> authorities : 인증된 권한 정보
- principal : 인증 대상에 관한 정보. 주로 UserDetails 객체가 옴
- credentials : 인증 확인을 위한 정보. 주로 비밀번호가 오지만, 인증 후에는 보안을 위해 삭제함.
- details : 그 밖에 필요한 정보. IP, 세션정보, 기타 인증요청에서 사용했던 정보들.
- boolean authenticated : 인증이 되었는지를 체크함.
UsernamePasswordAuthenticationFilter
폼 로그인
DefaultLoginPageGeneratingFilter : 로그인 페이지
- GET / login 을 처리
- 별도의 로그인 페이지 설정을 하지 않으면 제공되는 필터
- 기본 로그인 폼을 제공
- OAuth2 / OpenID / Saml2 로그인과도 같이 사용할 수 있음.
UsernamePasswordAuthenticationFilter
- OST /login 을 처리. processingUrl 을 변경하면 주소를 바꿀 수 있음.
- form 인증을 처리해주는 필터로 스프링 시큐리티에서 가장 일반적으로 쓰임.
- authenticationDetailSource : Authentication 객체의 details 에 들어갈 정보를 직접 만들어 줌.
주요 설정 정보 | |
filterProcessingUrl | 로그인을 처리해 줄 URL (POST) |
username parameter | POST에 username에 대한 값을 넘겨줄 인자의 이름 |
password parameter | POST에 password에 대한 값을 넘겨줄 인자의 이름 |
로그인 성공시 처리 방법 | |
defaultSuccessUrl | alwaysUse 옵션 설정이 중요 |
successHandler |
로그인 실패시 처리 방법 | |
failureUrl | alwaysUse 옵션 설정이 중요 |
failureHandler |
DefaultLogoutPageGeneratingFilter : 로그아웃 페이지
- GET /logout 을 처리
- POST /logout 을 요청할 수 있는 UI 를 제공
- DefaultLoginPageGeneratingFilter 를 사용하는 경우에 같이 제공됨.
LogoutFilter
- POST /logout 을 처리. processiongUrl 을 변경하면 바꿀 수 있음.
- 로그 아웃을 처리
- session, SecurityContext, csrf, 쿠키, remember-me 쿠키 등을 삭제처리 함.
- (기본) 로그인 페이지로 redirect
- LogoutHandler
- void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication);
- SecurityContextLogoutHandler : 세션과 SecurityContext 를 clear 함.
- CookieClearingLogoutHandler : clear 대상이 된 쿠키들을 삭제함.
- CsrfLogoutHandler : csrfTokenRepository 에서 csrf 토큰을 clear 함.
- HeaderWriterLogoutHandler
- RememberMeServices : remember-me 쿠키를 삭제함.
- LogoutSuccessEventPublishingLogoutHandler : 로그아웃이 성공하면 이벤트를 발행함.
- LogoutSuccessHandler
- void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException;
- SimpleUrlLogoutSuccessHandler
'BackEnd > Security · JPA' 카테고리의 다른 글
[ Security ] 01. 시큐리티 사용하기 - 설정 파일 (0) | 2023.05.03 |
---|---|
[ JPA ] 동적 쿼리 처리를 해주는 Querydsl 사용해보기 (1) | 2023.04.16 |
[ JPA ] Embedded - 재활용 가능한 Entity (0) | 2023.04.02 |
[ JPA ] @Query ( 쿼리 커스텀 ) - Native Query (0) | 2023.03.31 |
[ JPA ] Cascade ( 영속성 전의 ) - 고아제속성 (0) | 2023.03.31 |