Spring Boot 기반으로 개발하는 Spring Security : 완강 후 느낌점
2023. 9. 10. 12:44
무조건 따라하기/Spring Boot 기반 Security
스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의 초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과 www.inflearn.com 부트캠프를 마치고 신입 개발자로 첫 회사에 입사하게되었다. 3개월이 지나고 백엔드 업무와 회사의 코드컨벤션이 익숙해졌을 쯤 1년뒤 2년뒤는 적어도 지금과 달라져야한다는 생각이 많이들었다. 특히 나와 실력차이가 많이 나는 팀장님을 보면, 한 없이 내가 작게 느껴지고 1년뒤에는 현재의 팀장님 실력만큼은 따라..
Spring Boot 기반으로 개발하는 Spring Security : SecurityContextHolder, SecurityContext
2023. 4. 25. 21:57
무조건 따라하기/Spring Boot 기반 Security
SecurityContext • Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스 • ThreadLocal 에 저장되어 한 쓰레드 내에서 참조가 가능하다. • 인증이 완료되면 HttpSession 에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다 SecurityContextHolder SecurityContext을 감싸고 있는 클래스로 SecurityContext를 저장하는 방식이 4가지가 있다. MODE_THREADLOCAL : 스레드당 SecurityContext 객체를 할당, 기본값 MODE_INHERITABLETHREADLOCAL : 메인 스레드와 자식 스레드에 관하여 동일한 SecurityCo..
Spring Boot 기반으로 개발하는 Spring Security : 인증 개념 이해 - Authentication
2023. 4. 20. 22:16
무조건 따라하기/Spring Boot 기반 Security
Authentication이란? 스프링 시큐리티에서 Authentication은 사용자의 인증 정보를 나타내는 인터페이스이다. 스프링 시큐리티는 Authentication 객체를 만들고, 이를 보유하고, 인증 정보를 검증하고, 사용자 인증 정보를 유지 관리하고, 사용자 권한을 부여하기 위해 사용된다. 이러한 인증 과정은 보안에 중요한 역할을 한다. 인증 시 id 와 password 를 담고 인증 검증을 위해 전달되어 사용 되며, 인증이 성공하면 사용자는 시스템에 대한 액세스 권한을 부여받고 SecurityContext 에 저장되어 전역적으로 참조가 가능하다 Authentication 인터페이스의 구조는 아래와 같다. principal : 사용자 아이디 혹은 User 객체를 저장 credentials : ..
Spring Boot 기반으로 개발하는 Spring Security : 위임 필터 및 필터 빈 초기화 DelegatingProxyChain, FilterChainProxy
2023. 4. 20. 21:43
무조건 따라하기/Spring Boot 기반 Security
DelegatingProxyChain 이란? DelegatingProxyChain를 간단하게 설명하면 springSecurity는 servletFilter기반으로 보안처리하고 비지니스로직을 수행할 수 있도록 진행된다. 하지만 요청을 받는 servletFilter는 서블릿컨테이너에서 생성되고 실행된다. 즉, 스프링컨테이너에서 생성되고 관리되는 스프링빈에 접근할 수 없다. springSecurity는 스프링빈을 만들고 servletFilter를 구현하고 있기 때문에 요청을 받은 servletFilter가 springSecurityFilterChain 이름으로 생성된 빈을 ApplacationContext에서 찾아서 스프링빈에 요청을 위임할 수 있게 해주는 프록시가 DelegatingProxyChain 이다...
Spring Boot 기반으로 개발하는 Spring Security : CSRF, CsrfFilter
2023. 4. 19. 22:08
무조건 따라하기/Spring Boot 기반 Security
CSRF CSRF란? CSRF는 Cross-Site Request Forgery의 약어로, "사이트간 요청 위조"를 의미한다. 공격자가 사용자가 로그인한 웹사이트를 통해 사용자가 모르는 상황에서 원치 않는 동작을 수행하게 하는 보안 취약점이다. 위 이미지와 같이 공격을 방지하기 위해 웹 개발자들은 요청을 보낼 때 추가적인 보안 검증 절차를 구현하고, 사용자에게 요청의 적절성을 확인하도록 요청하는 등의 대응 방안을 마련해야 한다. CsrfFilter CsrfFilter란? CsrfFilter는 웹 어플리케이션에서 CSRF(Cross-Site Request Forgery) 공격을 방지하기 위한 필터다. Spring Security에서 제공하는 CsrfFilter는, HTTP 요청에 대해 CSRF 토큰을 생성..
Spring Boot 기반으로 개발하는 Spring Security : ExceptionTranslationFilter, RequestCacheAwareFilter
2023. 4. 18. 22:06
무조건 따라하기/Spring Boot 기반 Security
ExceptionTranslationFilter ExceptionTranslationFilter는 AuthenticationException과 AccessDeniedException 이 두가지의 예외를 처리하는데 ExceptionTranslationFilter가 try-catch로 감싸고 catch에 오면 Filtersecurityinterceptor가 받아 예외를 발생시킨다. AuthenticationException AuthenticationEntryPoint 호출한다. 인증예외가 발생하기 전에 요청정보를 저장한다. AccessDeniedException 인가 예외 처리 - AccessDeniedHandler에서 예외처리하도록 제공 설정 전체코드 @Configuration @EnableWebSecur..
Spring Boot 기반으로 개발하는 Spring Security : 권한설정과 표현식
2023. 4. 16. 20:46
무조건 따라하기/Spring Boot 기반 Security
권한 설정 http.antMatchers("{url}").hasRole(“{role}") 와 같이 설정이 가능하다. http .authorizeRequests() .antMatchers("/login").permitAll() // login 페이지는 인증이 안돼도 접근이 가능해야하기 때문에 .antMatchers("/user").hasRole("USER") .antMatchers("/admin/pay").hasRole("ADMIN") .antMatchers("/admin/**").access("hasRole('ADMIN') or hasAnyRole('sys')") //표현식을 사용해 두개이상의 권한을 설정 .anyRequest().authenticated(); ※ 주의 사항 - 설정 시 구체적인 경로가 ..
Spring Boot 기반으로 개발하는 Spring Security : SessionManagementFilter, ConcurrentSessionFilter
2023. 4. 16. 12:23
무조건 따라하기/Spring Boot 기반 Security
예외 처리 및 요청 캐시 필터 SessionManagementFilter 1.세션 관리 - 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리 2.동시적 세션 제어 - 동일 계정으로 접속이 허용되는 최대 세션수를 제한 3.세션 고정 보호 - 인증 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 4.세션 생성 정책 - Always, If_Required, Never, Stateless 주요 클래스 ConcurrentSessionControlAuthenticationStrategy - 현재 저장된 세션의 count를 제공한다. ChangeSessionIdAuthenticationStrategy - 세션 고정 보호를 위해 세션ID를 교체한다. RegisterSessionAut..