Spring Security Spring에서는 Web 기반의 Security, Method 기반의 Security 기능을 제공 Method 기반은 Method 별로 권한을 체크하며 Filter 단이 아닌 Controller 단에서 권한을 처리 Web 기반은 Filter 단에서 권한을 처리 두 개의 Security 적용 방식은 하나만 선택하는게 아니라 동시에 섞어서 사용 가능 예를 들어 Web에서 URL과 Token 인증을 하고 Method에서 권한에 따라 인가를 하는 방법이 있다. 왜쓰는가? -> 웹에서 서비스를 하기 위해 리소스와 유저 정보를 가지고 있는데 이를 보호하기 위해 보안 정책을 설정을 서포트하는 라이브러리인 Spring Security 사용 Config 에서 WebSecuerityConfig..
Spring/1-5. Spring Security
OncePerRequestFilter란? : 한 요청에 대해 한번만 실행하는 필터 포워딩(fowarding)이 발생하면 필터 체인(FilterChain)이 다시 동작되는데, 인증은 여러번 처리가 불필요하기에 한번만 처리할 수 있도록 도와주는 역할을 한다. OncePerRequestFilter의 doFilter() : 최초 실행 시에 ServletRequest 객체에 자신의 이름과 함께 true값을 함께 세팅해두고, doFilterInternal메소드로 자신의 기능을 수행한다. 그 후에 리다이렉트로 다시 실행되면 요청 객체에 담아뒀던 이전 수행에 대한 여부를 체크한다. public abstract class OncePerRequestFilter extends GenericFilterBean { ….(생략)..
UserDetails를 구현한 User 객체와 UserDetailsService와 UserDetails를 사용하여 로그인 구동 UserDetails로 구현한 User객체 @Data @AllArgsConstructor @NoArgsConstructor @Builder @Entity @Table(name="user") public class UserEntity implements UserDetails { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userId; @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name="user_id", fore..
1. BasicAuthenticationFilter 기본적인 로그인 페이지(formLogin)을 사용 할 수 없을 때 사용 SPA(Single Page Application) 페이지 같은 뷰를 프론트 단에서 책임지는 방식의 브라우저 기반의 모바일 앱에 사용 http 헤더값으로 전달 되기 때문에 httpBasic()를 허용하여 BasicAuthenticationFilter 사용, 헤더 값이 base64인코딩 되어 전달 되기 때문에 보안에 매우 취약하여 반드시 https 프로토콜 사용을 권장. 최초의 로그인 시에만 인증을 처리하고, 이후에 session에 의존 에러 시 401인 UnAuthorized 발생 @Configuration public class MobSecurityConfig extends Web..
1. Form Login DefaultLoginPageGeneratingFilter 기본 로그인 페이지 및 폼 제공 Get방식의 /login 처리 OAuth2 / OpenID / Saml2 로그인 같이 사용 가능 UsernamePasswordAuthenticationFilter Post방식의 /login 처리 http.processingUrl()을 통해 주소를 변경 가능 filterProcessingUrl() : 로그인을 처리 Url dafaultSuccessUrl() : alwaysUse=false 옵션 설정하여 로그인이 성공했음에도 불구하고 다른 페이지를 사용시 적용되지 않도록 하기위한 옵션 successHandler() : 성공시 핸들러 동작 failureUrl() : 실패시 Url failureH..
1. Authentication 구조 인증 토큰(Authentication)을 제공하는 필터들 UsernamePasswordAuthenticationFilter : 폼 로그인 -> UsernamePasswordAuthenticationToken RememberMeAuthenticationFilter : remember-me 쿠키 로그인 -> RememberMeAuthenticationToken AnonymousAuthenticationFilter : 로그인하지 않았다는 것을 인증함 -> AnonymousAuthenticationToken SecurityContextPersistenceFilter : 기존 로그인을 유지함(기본적으로 session 을 이용함) BearerTokenAuthenticationF..
1) 웹 애플리케이션 서버의 Filter 웹 애플리케이션 서버, 곧 서블릿 컨테이너의 Filter는 디스패처 서블릿으로 가기전에 먼저 적용 여러 개의 Filter들이 연결되어 있어 FilterChain이라도 불림 모든 Request는 Filter들을 거쳐 서블릿에 도착 2) Spring Security의 Filter DelegatingFilterProxy라는 필터를 만들어 FilterChain 사이에 넣어 SpringSecurity Filter를 거치도록 하고, Proxy 아래 SecurityFilterChain 그룹을 적용하여 특정 Url을 설정하여 다르게 동작하도록 한다. WevSecurityConfigurerAdapter을 상속받은 Config 사용자 클래스로 Config(HttpSecurity h..
1 ) Spring Security 정의 Spring 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크 인증(Authentication) 과 권한(Authorization) 에 대한 부분을 Filter의 흐름에 따라 처리를 하고 있다. 2) 인증(Authentication) 과 권한(Authorization) 인증 사이트에 접속하려고 할 때의 확인 절차 Session과 Token(Sessionless)을 통한 인증 절차 SNS 로그인에 인증 위임 인가 or 권한 사용자의 권한 설정 절차 특정 페이지 및 리소스에 접근 가능 판단 @Secure, @PrePostAuthorize 어노테이션으로 권한 체크 AOP를 이용하여 권한 체크 * 인증 절차를 거친 후 권한절차를 진행하게 된다. * 요즘에는 아이..