Spring Boot/Spring Security13 [Spring Security] @AuthenticationPrincipal 어노테이션 사용하기 https://techjisu.tistory.com/97 저번글과 이어지는 내용입니다. 일반로그인 테스트까지는 성공하였는데 뷰에서 OAuth2로그인을 하여서 모임을 만들려고 하니 PrincipalDetails를 member로 캐스트 할수없다는 에러가나면서안되었습니다. 이제 진짜 어떻게 해야되나..하... 그래서 security를 처음부터 공부하자는 마음으로 전체코드를 처음부터 다시 쭉 보고 있었는데 저번글의 마지막에 썼던내용이 생각났습니다. 스프링 시큐리티는 SecurityContext에 인증된 Authentication 객체를 넣어두고 현재 스레드 내에서 공유되도록 관리하고 있는데요. 그래서 스프링 시큐리티가 가지고 있는 UsernamePasswordAuthenticationToken을 이용하여 어댑터.. Spring Boot/Spring Security 2022. 8. 17. [Spring Security] 스프링 시큐리티 인증객체가 있는 컨트롤러 테스트 하기 요즘에 테스트 코드 짜는 것에 집중하고 있고 많이 공부하고 있습니다. 현재 전에 작업했던 java 8, spring, mybatis, jsp, 했던 프로젝트를 java 11, spring boot, jpa , thymeleaf, security를 사용하여 마이그레이션하고 있습니다. https://github.com/KOSMO-Togather Spring Boot/Spring Security 2022. 8. 16. [Spring Security] Authentication 인증 Authentication Authentication는 인증을 의미합니다. 스프링 시큐리티는 사용자의 인증정보를 저장하는 토큰 개념으로 사용한다. 인증 시 id와 password를 담고 인증 검증을 위해 전달되어 사용된다. 인증 후 최종 결과 (user 객체, 권한정보)를 담고 SecurirtyContxt에 저장되어 전역적으로 참조가 가능하다. Authentication authentication = SecurityContexHolder.getContext(). getAuthentication() 구조 1) pricipal: 사용자 아이디 혹은 User 객체를 저장 2) credentials : 사용자 비밀번호 3) authorities : 인증된 사용자의 권한 목록 4) details : 인증 부가 정.. Spring Boot/Spring Security 2022. 6. 30. [Spring Securtiy] Spring Security의 Filter Filter Servlet Container의 Filter 서블릿 컨테이너의 Filter는 Dispatch Servlet으로 가기 전에 먼저 적용된다. Filter들은 여러개가 연결되어 있어 Filter chain이라고도 불린다. 모든 Request들은 Filter chain을 거쳐야지 Servlet에 도착하게된다. Spring Security의 Filter Spring Security는 DelegatingFilterProxy 라는 필터를 만들어 메인 Filter Chain에 끼워넣고, 그 아래 다시 SecurityFilterChain 그룹을 등록한다. 그렇게 하며 URL에 따라 적용되는 Filter Chain을 다르게 하는 방법을 사용한다. 어떠한 경우에는 해당 Filter를 무시하고 통과하게 할 수도.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] CSRF CSRF (Cross Site Request Forgery) CSRF 공격은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다. 쇼핑몰이 있습니다. 공격자, 사용자(피해자), 서버 이렇게 있습니다. 이때 사용자(피해자)가 로그인 되어있습니다. 공격자가 사용자에게 링크를 보내서 사용자가 클랙한다면 공격자용 홈페이지에 접속하게 됩니다. 예를 들면 공격자용 코드는 다음과 같습니다. 이런식으로 광고같은 거를 누르면 사용자가 공격용 페이지가 열리면서 사용자의 승인 없이 배송지같은게 등록됨으로써 공격이 완료 됩니다. 그래서 스프링 시큐리티는 CsrfFilter라는 필터를 만들어서 이것을 방지.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] 예외 처리 및 요청 캐시 필터 ExceptionTranslationFilter ExceptionTranslationFilter는 두 가지 종류의 예외를 처리한다. FilterSecurityinterceptor 필터가 맨 마지막 필터인데 이 필터 바로 앞에 위치한 필터가 ExceptionTranslationFilter입니다. ExceptionTranslationFilter 가 실행될 때 try catch로 FilterSecurityinterceptor를 호출하고 있습니다. AuthenticationException : 인증 예외 처리 1. AuthenticationEntryPoint 호출 • 로그인 페이지 이동, 401 오류 코드 전달 등 --사용자에게 인증 예외가 발생했기 때문에 다시금 인증을 할 수 있게 처리한다. --개발자가 구현.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] 권한 설정 권한 설정 권한 설정은 선언적 방식과 동적 방식으로 나뉜다 선언적 방식 선언적방식은 URL과 Method로 나뉜다. • URL - http.antMatchers("/users/**"). hasRole(“USER") • Method - @PreAuthorize(“hasRole(‘USER’)”) public void user(){ System.out.println(“user”)} 동적 방식 – DB 연동 프로그래밍 • URL • Method 지금은 선언적 방식의 URL방식을 다뤄 보겠습니다. 적용 @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher(“/shop/**”) .authorizeRequest.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] 동시 세션제어, 세션 고정 보호, 세션정책 동시 세션 제어 동시 세션 제어는 동일한 계정으로 인증을 받을 때 즉, 로그인을 했을 때 생성되는 세션에 대해서 최대 세션 허용 개수를 초과했을 때 어떻게 그 세션 개수를 초과하지 않고 유지할 수 있는지에 대한 것이다. 예를 들어 서버에서 설정한 동일한 계정에 대한 세션 최대 개수가 1개라고 하면, 웹에서 로그인을 하면 세션이 1개가 생성된다. 그리고 모바일에서도 똑같은 계정으로 로그인했을 때는 세션이 2개가 된다. 이 상황에 대해서 허용 세션은 1개인데 나머지 1개를 어떻게 처리할지에 대해서 처리하는 것을 동시 세션 제어를 통해 설정할 수 있습니다. 스프링 시큐리티는 밑의 그림과 같이 두 가지 전략으로 동시 세션 제어를 제공하고 있습니다. 동일 한계정으로 허용되는 세션 개수는 1개로 가정합니다. 1. .. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Remember Me 인증, RememberMeAuthenticationFilter Remember Me 인증 우리가 일반적인 웹 애플리케이션에 접속할 때 로그인 유지하기가 있을 것이다. 그 기능은 쿠키로 구현하는것인데. 스프링 시큐리티에서는 이 기능 또한 제공하고 있다. Remember me 적용하기 protected void configure(HttpSecurity http) throws Exception { http.rememberMe() .rememberMeParameter(“remember”) // 기본 파라미터명은 remember-me .tokenValiditySeconds(3600) // Default 는 14일 .alwaysRemember(true) // 리멤버 미 기능이 활성화되지 않아도 항상 실행 .userDetailsService(userDetailsService) .. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Logout처리, LogoutFilter Logout 처리 클라이언트가 로그아웃 요청을 보내면 request(/logout) 스프링 시큐리티가 그 요청을 받고 로그아웃처리를 합니다 로그아웃 처리는 세션을 무효화하고, 인증 토큰 삭제(Security Context 삭제) , 쿠키 정보 삭제, 로그아웃이 성공하면 로그인 페이지로 이동하도록 처리하고 있습니다. 로그아웃을 하려면 다음과 같은 api를 사용해야 합니다. protected void configure(HttpSecurity http) throws Exception { http.logout() // 로그아웃 처리 .logoutUrl("/logout") // 로그아웃 처리 URL .logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지 .deleteCookies("J.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Form Login 인증 필터 UsernamePasswordQuthenticationFilter UsernamePasswordAuthenticationFilter는 사용자 form 인증처리를 하는 필터입니다. 인증 전에는 정보를 담아서 매니저에게 넘기는 역할을 하고 인증이 성공한 후에는 시큐리티 콘텍스트에 넘기는 역할을 합니다. 사용자가 요청을하면 UsernamePasswordAuthenticationFilter가 인증처리를 합니다. 사용자가 인증을 시도하면 필터가 요청 URL을 확인을 합니다. 현재 요청이 AntPathRequestMatcher를 통해 /login인지 확인을 합니다. 매칭이 되면 로그인 처리를 하는 것이고 아니면 필터로 이동을 합니다. 참고로 이 url은 사용자 정의 보안 기능을 구현할 때 loginProcessin.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Form Login 인증 SecurityCong http .authorizeRequests() .anyRequest().authenticated();//모든 곳에 인증해야함 http .formLogin() .loginPage("/loginPage") //로그인커스텀 페이지 기본은 security가 제공하는 /login으로 이동한다. .defaultSuccessUrl("/") //성공했을때의 이동 페이지 .failureUrl("/login") //실패시 돌아갈 URL .usernameParameter("userId") .passwordParameter("passwd") .loginProcessingUrl("/login_proc") //로그인읋 할때 전송되는 URL .successHandler(new AuthenticationSuc.. Spring Boot/Spring Security 2022. 6. 29. 이전 1 2 다음