본문 바로가기

SPRING SECURITY

(8)
[Spring Security] FilterSecurityInterceptor와 인가처리과정 FilterSecurityInterceptor는 사용자가 권한이 있는 페이지에 접속할 때 접속 가능 여부를 판단하는 Filter이며, Filter중 제일 마지막에 위치하고 있습니다. FilterSecurityInterceptor에서는 요청정보, 권한정보, 인증정보가 필요하며 이것을 획득하면 AccessDecisionManager에게 보내서 이곳에서 인가처리를 하게 됩니다. 이번 글에서는 요청정보, 권한정보, 인증정보를 알아보겠습니다. 요청정보 요청정보는 사용자가 어떤 URL을 입력했는지 알아내는 것 입니다. 이것은 FilterInvocation 을 통해 알아낼 수 있습니다. 만약 제가 www.localhost:8080/login 을 입려했다고 가정한다면 request, response, chain을 Fi..
CSRF란? CSRF란? 사이트 간 요청 위조 (Cross-site Request Forgery) 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격을 말한다. -위키피디아- 공격 시나리오 예시를 들기 위해 티스토리 블로그를 사용한다는 가정을 하겠습니다. 티스토리 게시물 작성 URL은 POST방식의 www.tistory.com/write?title=abcd&content=1234 이라고 임의로 정하겠습니다. 1. 사용자는 티스토리에 접속하여 세션 ID를 발급받은 후 로그인을 성공해 줍니다. 로그인을 성공하게되면 해당 세션 ID를 이용하여 위에서 정한 게시물 작성 URL을 통해 게시글 작성이 가능해질 것입니다. 2. 공격자는 사용자에게 이메일 보..
[SpringSecurity] 인증성공, 실패 핸들러 로그인에 성공을 하거나 실패를 했을 때 부가작업을 해보려고 합니다. 1. 인증성공 - 로그인 성공시, Redirect할 URL 설정 예를 들어, 로그인을 하지 않은 경우에 권한이 있는 페이지에 접근을 하려고 하면 로그인 페이지로 넘어가는 경우가 있습니다. 이 과정에서 로그인을 성공 했을 때 Redirect할 URL이 접근 하려고 시도 했던 페이지의 URL이 되어 그 페이지로 바로 넘어가도록 해보겠습니다. @Component public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { private RequestCache requestCache = new HttpSessionRequestCache..
[SpringSecurity] 인증부가기능(WebAuthenticationDetails, WebAuthenticationDetailsSource) 인증 부가기능이란? SpringSecurity에서 보통 ID와 PASSWORD를 이용하여 로그인 처리를 합니다. 하지만 ID, PASSWORD 이외에도 추가로 파라미터를 전달하여 인증과정 속에서 활용하거나 인증 이후에도 이 정보들을 참조하여 사용자가 서버에 접근할 수 있도록 하고 싶다면 이러한 방법이 있습니다. WebAuthenticationDetails, WebAuthenticationDetailsSource 이 두 개의 클래스에 의해 파라미터를 추가할 수 있는데, 이 것의 흐름은 이렇습니다. 1. 사용자가 ID와 PASSWORD 그리고 PARAM1과 PARAM2를 입력하여 전송합니다. 2. 이 request 객체는 AuthenticationFilter를 통해 Authentication 인증 객체를 만..
[Spring Security] UsernamePasswordAuthenticationFilter에 대해서 UsernamePasswordAuthenticationFilter는 Form인증을 처리하는 필터이다. 사용자가 로그인하면 인증처리가 이루어지는데, 이 인증처리를 담당하고 관련된 요청을 처리한다. 내부적으로 각각의 인증처리의 역할을 따라 여러 클래스를 활용해서 인증처리를 하게 된다. 인증을 처리하는 과정이다. 1. Form인증으로 인증을 시도하면 UsernamePasswordAutenticationFilter가 요청을 받는다. 2. 사용자가 요청한 url정보(요청정보)를 확인한다. 위의 사진에서는 현재 요청정보의 url이 login인지 확인한다.(default값은 login) 이 값은 http. loginProcessingUrl("...")에서 바꿀 수 있다. default값이 login이기 때문에 /lo..
[Spring Security] Form Login 인증에 대해서 http. formLogin() : Form 로그인 인증 기능이 작동 http .formLogin() .loginPage("/login.html") 로그인이 필요할 시 사용자가 만든 로그인 페이지로 넘어간다. 따로 정의하지 않으면 spring security에 자체적으로 있는 페이지가 나온다. .defaultSuccessUrl("/home") 로그인 성공 후 이동할 페이지 .failureUrl("..") 로그인 실패 후 이동할 페이지 .usernameParameter("username") 아이디 파라미터명 설정 .passwordParameter("password") 패스워드 파라미터명 설정 .loginProcessingUrl("/login") form태그에서 action Url을 설정한 대로 변경할 수 ..
[Spring Security] 스프링 시큐리티 시작 Spring Security를 의존성 추가하고 서버를 기동시키면 서버 안에 spring security가 초기화되면서 웹 보안 기능을 활성화시킨다. spring security가 활성화될 때 가장 중요한 핵심은 WebSecurityConfigurerAdapter클래스이다. 이 클래스는 웹 보안 기능을 초기화 및 설정하는데 이 과정에서 HttpSecurity클래스 객체를 생성한다. 이 클래스는 세부적인 보안기능을 설정할 수 있는 인증 API와 인가 API를 제공한다. HttpSecurity의 applyDefaultConfiguration에서 11개 설정을 초기화해주고 configure메서드로 넘어가는데, configure메서드는 인증 또는 인가와 관련된 기능들을 추가적으로 설정할 수 있다. 여기서 . au..
[SPRING SECURITY] 실제 DB에서 인증하기 DB로부터 사용자를 직접 조회하고, 조회한 사용자를 통해서 인증처리를 이루어질 수 있도록 구현하려고 한다. 그러기 위해 UserServiceDetailsService를 커스터마이징을 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @Service("userDetailService") public class CustomUserDetailsService implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNo..