본문 바로가기
반응형

Spring/Spring Security19

Authentication 아키텍쳐 *개요Authentication(인증) 아키텍처 공식문서를 확인합니다.자세한 내용은 Servlet Authentication Architecture에서 확인 가능합니다.(5.6.13-SNAPSHOT 기준)  SecurityContextHolder    스프링 시큐리티 인증 모델의 핵심은 SecurityContextHolder입니다. 인증 정보들을 저장하는 장소입니다. 스프링 시큐리티는 SecurityContextHolder가 어떻게 채워지는지 관심이 없습니다. 값이 있다면, 인증된 사용자로 활용합니다. 즉, 사용자 인증을 구현하려면 SecurityContextHolder에 직접 인증정보를 넣습니다. SecurityContext context = SecurityContextHolder.createEmpty.. 2024. 5. 21.
Spring Security 구조 메커니즘 *개요 Spring Security의 구조 메커니즘을 학습합니다. 스프링 라이브러리와 서블릿 컨테이너의 필터가 어떻게 서로 연결되어 동작하는지 학습합니다.  필터 리뷰 스프링 시큐리티의 서블릿 지원은 서블릿 Filter에 기반을 둡니다. 아래 사진은 HTTP 요청 시 핸들러의 계층입니다. 만약 사용자는 어플리케이션에 요청을 보내면 컨테이너는 FilterChain을 생성합니다. FilterChain은 Filter와 Servlet으로 이루어졌으며 URL 요청에 따라 HttpServletRequest를 수행합니다. FilterChain은 이름대로 여러 개의 필터를 체인 형태로 가질 수 있는데 순서대로 아래 방향으로 실행되면서 Filter와 Servlet의 호출을 진행하거나 막을 수 있고 HttpServletR.. 2024. 5. 17.
Security AccessDecisionManager 구현 학습하기 *개요Spring Security Authorization 구현 학습으로 좋은 설계를 확인합니다.본 내용은 Spring Security Authorization Architecture를 기반으로 작성하였습니다.(1) 추상골격 구현, (2) 인터페이스 합성 의존, (3) OCP 구현을 알아보겠습니다.  Voting-Based AccessDecisionManager Implementations 투표 기반의 권한 검사는 AccessDecisionManager가 담당하며 AbstractSecurityInterceptor에 의해 호출됩니다.    AccessDecisionManager 구현체의 "투표"를 활용해 사용자의 자원 접근 권한을 통제할 수 있습니다. decide()  구현이 핵심입니다. 권한 심사를 통과.. 2024. 5. 15.
AuthToken 사용하기 이전에는 Session으로 구성했지만, 이제는 JWT 토큰을 사용하여 시큐리티를 구성한다. 핵심은 Bearer Token을 Client에 주도록 설정하는 것이며, 로그인할 때 Token을 검사하는 것이다. @Override protected void configure(HttpSecurity http) throws Exception { JWTLoginFilter loginFilter = new JWTLoginFilter(authenticationManager(), spUserService); JWTCheckFilter checkFilter = new JWTCheckFilter(authenticationManager(), spUserService); http .csrf().disable() .sessionM.. 2021. 10. 26.
JWT 토큰 서버에서 인증된 사용자가 인증을 유지해주는 방법은 보통 세션을 사용한다. 서버 세션을 사용하면 인증된 사용자는 매우 편리하게 서비스를 이용할 수 있고, 대부분 웹 애플리케이션 서버가 세션을 지원하기 때문에 편리하다. 하지만, 서버를 여러대 둘 경우(scale out), 같은 사용자가 서로 다른 도메인의 데이터를 요청할 경우, (SSO)에는 세션을 유지하기 위한 비용이 매우 커진다. MSA는 각 서비스별로 각각의 서버를 가지고 있다. 한쪽에서 로그인을 하면 다른 쪽에서도 연속성 있게 로그인 정보를 유지해야 한다. 세션을 사용하는 경우 서버는 request 사용자에 대해 서버에 저장된 세션을 구분해서 인식해야 한다. 여러대의 서버라면 세션을 공유하거나 복사하거나 하는 전략이 필요하다. 따라서,. 서버에 사용.. 2021. 10. 26.
임시권한 부여하기 임시권한 부여를 확인하기 위해서, SecurityInterceptor의 내부 작동방식을 다시 한번 짚어보고, 임시권한을 추가해야 할 위치를 확인한다. FilterSecurityInterceptor, MethodSecurityInterceptor 2개의 Interceptor는 각각 invoke 메서드가 작동한다. public Object invoke(MethodInvocation mi) throws Throwable { InterceptorStatusToken token = super.beforeInvocation(mi); Object result; try { result = mi.proceed(); } finally { super.finallyInvocation(token); } return super... 2021. 10. 23.
반응형