minlog
article thumbnail

 

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

 
 
 
 
 
 
 
 
 
 
 

profile

minlog

@jimin-log

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!