본문 바로가기
반응형

Spring91

메서드 후처리 메서드 후처리는 메서드가 결과를 리턴한 다음에 리턴된 객체를 사용자가 접근할 수 있는지 검사한다. 권한은 메서드쪽에서 MethodSecurityInterceptor를 통해서 검사한다. MethodSecurityInterceptor 에서 중요한 멤버는 아래 세가지다. AccessDecisionManager : @Secured 나 @PreAuthorize, @PreFilter 를 처리한다. (사전체크) AfterInvocationManager : @PostAuthorize, @PostFilter 를 처리한다. (사후체크) RunAsManager : 임시권한을 부여한다. AccessDecisionManager 는 Voter가 필요하여 AccessDecisionVoter가 다양한 Voter를 가지고 있지만, A.. 2021. 10. 19.
권한위원회 voter 일반적으로 권한은 AccessDecisionManager이 담당하며, 역할은 인증이 완료된 사용자가 리소스에 접근하려고 할때 해당 요청을 허용할것인지 판단하는 인터페이스이다. AccessDecisionManager의 decide()만 구현하면 끝이난다. 꼭 Voter기반으로 할 필요는 없지만 Voter를 많이 사용하기 때문에 해당 방식의 원리를 알고 있는 것이 좋다. 인터페이스 구현체는 3가지를 제공한다. AccessDecisionManger 권한 위원회는 - AffirmativeBase :여러 Voter중에 하나라도 허용되면 허용된다. (기본설정) - ConsensesBased : 다수결 - UnaminousBased : 만장일치 3가지의 종류를 가지고 있다. public void decide(Auth.. 2021. 10. 17.
스프링 시큐리티의 권한(Authorization) AOP는 관심사가 같은 코드들끼리 묶는 역할을 한다. 서로 섞지 않고 분리한다. IT초기에는 스파게티 코드들이 많았는데 권한, 트랜잭션 코드들이 비지니스 로직과 모두 묶여 있었기 때문이다. 좋은 설계를 위해 트랜잭션, 로그, 권한처리 등등을 비지니스 로직에서 분리하는 고민이 있었고 그 결과 AOP 기술이 탄생하였다. 공통의 관심사를 어떻게 분리하는가? PointCut을 통해서 advice를 삽입한다. 코드를 서로 분리해두는데, 비지니스 로직의 적절한 곳에 권한, 로그 ,트랜잭션 커밋 등이 적용될 수 있도록 진입점을 가리켜 두는 것이다. SecurityFilterChain당 1개의 AccessDecisionManager가 있으며 Method 권한 판정은 하나의 Global 위원회에서 처리한다. 스프링 시큐.. 2021. 10. 15.
권한체크 오류처리 Interceptor 권한검사는 2곳에서 가능하다. FilterSecurityInterceptor 혹은 MethodSecurityInterceptor 이며 각각 필터, 메서드에서 검사한다. 해당 검사기능들이 Filter에 있는지 Method에 있는지에 따라서 작동하는 시점이 달라지는 것이다. 2가지 Interceptor의 역할과 차이점을 알아본다. *FilterSecurityInterceptor AccessDecisionManger는 권한검사를 하며 매우 중요한 역할이다. 그 아래에 AccessVoter들이 위원회를 소집해서 조사 및 투표를 하고 들어갈 수 있으면 투표를 하고 통과하지 못하면 AccessDenied를 한다. request .antMatchers("/").permitAll() .antMat.. 2021. 10. 15.
세션관리 ( 동시접속 ) * ConcurrentSessionFilter ConcurrentSessionFilter의 동시에 접속하는 세션들에 관심이 많다. 주요 역할은 SessionRegistry에서 SessionInformation의 expired가 true인 토큰이 들어오지 못하도록 감시하고 막는 역할을 한다. (마치 동시접속 제어 효과를 누린다.) Tomcat과 같은 servlet-container에서 제공하는 Session을 Spring이 제어 할 수 없다. tomcat이 넘겨주는 세션을 SessionRegistry에서 관리한다. 특정 sessionId의 expired를 true로 마킹하면, 더이상 접근하지 못하도록 막는 역할을 한다. ConcurrentSessionFilter 클래스를 확인해서 작동방식을 알아본다. 위의.. 2021. 10. 14.
RememberMe OAUTH2나 JWT는 큰 규모의 프로젝트이므로 메모리 그리드 방식의 세션을 유지하는 방법, 로그인 유지 방법을 고려해야 한다. 이번에 정리한 RememberMe 는 세션을 이용하여 인증할텐대, 먼저 스프링에서 세션을 유지하는 필터 2개를 알아본다. * 목차 스프링에서 세션 유지하는 필터 2개 SecurityContextPersistentFilter RememberMeAuthenticationFilter TokenBasedRememberMeServices 실습 loadUserByUsername() 구현방식 PersistentTokenBasedRememberMeServices 실습 * 스프링에서 세션 유지하는 필터 2개 스프링 시큐리티는 통행증인 Authentication을 발급해주면, 통행증을 보고 권한.. 2021. 10. 12.
UserDetailsService 이전까지는 모두 계정을 인메모리에서 사용했지만, 실무에서는 DB에서 계정 정보를 가져온다. 따라서 실제로 스프링 시큐리티를 써서 서비스를 만든다고 하면, 개발자들은 UserDetails를 구현한 User 객체와 UserDeatilsService부터 만든다. 왜냐하면, UserDetailsService와 UserDeatils 구현체만 구현하면 스프링 시큐리티가 나머지는 쉽게 쓸 수 있도록 대부분 설정해주기 때문이다. 추후 Student를 UserDetails 구현체로, StudentManager를 UserDetailsService 구현체로 개선한다. (UsernamePasswordAuthenticationToken => UsernamePasswordAuthenticationFilter 오타수정) Usern.. 2021. 10. 11.
BaiscToken으로 웹/모바일 로그인 인증 구현하기 실무에서 JWT 토큰 인증 구현이 가장 일반적이지만, 웹으로 만든 사이트를 모바일에서 하이브리드 형식으로 빠른 제공을 하고 싶다면 BasicToken을 사용하고 session을 이용하면 된다. *모바일에서 MultiChainProxy 구성하기 MobileSecurityConfig에서 BasicAuthenticationFilter 방식을 사용하는데, 이는 UsernamePasswordAuthentication 으로 검사하여 해당 토큰을 인증제공자(AuthenticationProvider)에게 준다. SecurityConfig에서 CustomLoginFilter를 사용하는데 CustomLoginFilter는 Student와 Teacher의 토큰을 인증하기 위해 각각 StudentAuthentication 토.. 2021. 10. 11.
BasicAuthentication 인증 *사용하는 경우 - SPA페이지(react, vue...) - 브라우저 기반의 모바일 앱(브라우저 기반의 앱, ex:inoic) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .httpBasic(); } } * BasicAuthenticationFilter 흐름 * 동작 방식 1. GET 방식으로 /greeting을 요청했을 때, headers에 Authorization에 토큰을 Basic으로 보낸다. 2. client의 요청이DispatcherServlet으로 가기 전에 필터에서 request.. 2021. 10. 11.
반응형