본문 바로가기

728x90
반응형

Spring 정리/Spring Security

(16)
세션관리 ( 동시접속 ) * ConcurrentSessionFilter ConcurrentSessionFilter의 동시에 접속하는 세션들에 관심이 많다. 주요 역할은 SessionRegistry에서 SessionInformation의 expired가 true인 토큰이 들어오지 못하도록 감시하고 막는 역할을 한다. (마치 동시접속 제어 효과를 누린다.) Tomcat과 같은 servlet-container에서 제공하는 Session을 Spring이 제어 할 수 없다. tomcat이 넘겨주는 세션을 SessionRegistry에서 관리한다. 특정 sessionId의 expired를 true로 마킹하면, 더이상 접근하지 못하도록 막는 역할을 한다. ConcurrentSessionFilter 클래스를 확인해서 작동방식을 알아본다. 위의..
RememberMe OAUTH2나 JWT는 큰 규모의 프로젝트이므로 메모리 그리드 방식의 세션을 유지하는 방법, 로그인 유지 방법을 고려해야 한다. 이번에 정리한 RememberMe 는 세션을 이용하여 인증할텐대, 먼저 스프링에서 세션을 유지하는 필터 2개를 알아본다. * 목차 스프링에서 세션 유지하는 필터 2개 SecurityContextPersistentFilter RememberMeAuthenticationFilter TokenBasedRememberMeServices 실습 loadUserByUsername() 구현방식 PersistentTokenBasedRememberMeServices 실습 * 스프링에서 세션 유지하는 필터 2개 스프링 시큐리티는 통행증인 Authentication을 발급해주면, 통행증을 보고 권한..
UserDetailsService 이전까지는 모두 계정을 인메모리에서 사용했지만, 실무에서는 DB에서 계정 정보를 가져온다. 따라서 실제로 스프링 시큐리티를 써서 서비스를 만든다고 하면, 개발자들은 UserDetails를 구현한 User 객체와 UserDeatilsService부터 만든다. 왜냐하면, UserDetailsService와 UserDeatils 구현체만 구현하면 스프링 시큐리티가 나머지는 쉽게 쓸 수 있도록 대부분 설정해주기 때문이다. 추후 Student를 UserDetails 구현체로, StudentManager를 UserDetailsService 구현체로 개선한다. (UsernamePasswordAuthenticationToken => UsernamePasswordAuthenticationFilter 오타수정) Usern..
BaiscToken으로 웹/모바일 로그인 인증 구현하기 실무에서 JWT 토큰 인증 구현이 가장 일반적이지만, 웹으로 만든 사이트를 모바일에서 하이브리드 형식으로 빠른 제공을 하고 싶다면 BasicToken을 사용하고 session을 이용하면 된다. *모바일에서 MultiChainProxy 구성하기 MobileSecurityConfig에서 BasicAuthenticationFilter 방식을 사용하는데, 이는 UsernamePasswordAuthentication 으로 검사하여 해당 토큰을 인증제공자(AuthenticationProvider)에게 준다. SecurityConfig에서 CustomLoginFilter를 사용하는데 CustomLoginFilter는 Student와 Teacher의 토큰을 인증하기 위해 각각 StudentAuthentication 토..
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..
authentication 메커니즘 * 인증 ( Authentication ) Authentication은 사이트에서 "통행증" 역할을 한다. Authentication을 구현하는 객체들은 대체로 메서드 이름 맨 뒤에 AuthenticationToken이 붙는다. 그래서 구현체들을 인증토큰이라고 부른다. Credentials : 인증을 위해 필요한 정보(input, 비밀번호) Principal : 인증된 결과, 인증대상(output) Details : 기타 정보, 인증 관련 주변 정보들(ip, session 관련) Authorities : 권한 정보들 (권한을 담당하는 GrantedAuthority를 구현한 객체들을 Authorities에 넣어둔다. ) Authentication 객체는 SecurityContextHolder를 통해 세션이..
basic login 과정 @EnableWebSecurity(debug = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests(request -> { request .antMatchers("/").permitAll() .anyRequest().authenticated(); }); } } "/" 이외에 모든 경로는 허용이 안된다. 요청이 오면 인증을 해야 한다. 하지만, 해당 코드에는 오류가 있다. 정적인 web resource에 대해서는 경로를 열어주어야 한다. @Override p..
간단한 로그인 페이지 만들기 스프링 시큐리티는 안전한 로그인을 위해 가장 많이 사용되며, 계정별로 권한을 부여할 때 사용한다. 간단한 방식으로 시큐리티가 적용된 로그인 페이지를 만들어보도록 한다. * 스프링 시큐리티 간단한 계정 설정 application.yml에서 임의의 계정을 추가할 수 있다. 하지만, 1개밖에 추가하지못한다. (다수 계정 설정을 위해서 WebSecurityConfigurerAdapter를 상속받은 클래스가 필요하다.) spring: security: user: name: user1 password: 1111 roles: USER 스프링 시큐리티에서 계정 정보는 크게 name, password, roles 3가지가 필요하다. * 스프링 시큐리티 로그인 정보 확인하기 @RequestMapping("/auth") p..

728x90
반응형