웹 어플리케이션을 사용하다 보면 로그인, 로그아웃을 하게 된다. 이렇게 아이디와 암호를 이용해서 로그인 하는 과정을 인증(Authentication)이라고 한다.
네이버 카페를 사용해보면 로그인을 했다 하더라도, 특정 카페는 회원가입을 하고 어느정도 이상의 등급이 되지 않을 경우 이용을 못하기도 한다. 이를 인가(Authorization)라고 한다.
Spring Security를 사용하면 편리하게 인증/인가를 구현할 수 있다.
보안 용어 | 의미 |
---|---|
접근 주체(Principal) | 보호된 대상에 접근하는 유저 |
인증(Authentication) | 인증은 '증명하다'라는 의미로 예를 들어, 유저 아이디와 비밀번호를 이용하여 로그인하는 과정을 말한다. |
인가(Authorization) | '권한부여'나 '허가'와 같은 의미로 사용된다. 즉, 어떤 대상이 특정 목적을 실현하도록 허용(Access)하는 것을 말한다. |
권한 | 인증된 주체가 어플리케이션의 동작을 수행할 수 있도록 허락되었는지 결정할 때 사용한다. |
Filter | 역할 |
---|---|
SecurityContextPersistenceFilter | SecurityContextRepository에서 SecurityContext를 가져오거나 저장하는 역할을 한다. |
LogoutFilter | 설정된 로그아웃 URL로 오는 요청을 감시하며, 해당 유저를 로그아웃 처리 |
(UsernamePassword)AuthenticationFilter | (아이디와 비밀번호를 사용하는 form 기반 인증) 설정된 로그인 URL로 오는 요청을 감시하며, 유저 인증 처리한다. 1. AuthenticationManager를 통한 인증 실행 2. 인증 성공 시, 얻은 Authentication 객체를 SecurityContext에 저장 후 AuthenticationSuccessHandler 실행 3. 인증 실패 시, AuthenticationFailureHandler 실행 |
DefaultLoginPageGeneratingFilter | 인증을 위한 로그인폼 URL을 감시한다. |
BasicAuthenticationFilter | HTTP 기본 인증 헤더를 감시하여 처리한다. |
RequestCacheAwareFilter | 로그인 성공 후, 원래 요청 정보를 재구성하기 위해 사용된다. |
SecurityContextHolderAwareRequestFilter | HttpServletRequestWrapper를 상속한 SecurityContextHolderAware RequestWapper 클래스로 HttpServletRequest 정보를 감싼다. Security ContextHolderAwareRequestWrapper 클래스는 필터 체인상의 다음 필터들에게 부가정보를 제공한다. |
AnonymousAuthenticationFilter | 이 필터가 호출되는 시점까지 사용자 정보가 인증되지 않았다면 인증토큰에 사용자가 익명 사용자로 나타난다. |
SessionManagementFilter | 이 필터는 인증된 사용자와 관련된 모든 세션을 추적한다. |
ExceptionTranslationFilter | 이 필터는 보호된 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달하는 역할을 한다. |
FilterSecurityInterceptor | 이 필터는 AccessDecisionManager 로 권한부여 처리를 위임함으로써 접근 제어 결정을 쉽게 해준다. |
위의 그림을 보며 어떤 일이 일어나는지 보자
reference
https://youmekko.github.io/2018/04/26/2018-04-26-Filter/
https://atin.tistory.com/590
https://springbootdev.com/2017/08/23/spring-security-authentication-architecture/