본문 바로가기
반응형

분류 전체보기714

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.
TIL_211024 1. Facts(사실, 객관) - 세션 개념 공부하기 2. Feelings(느낌, 주관) - 시큐리티를 계속 공부하다보니 세션에 대한 관심이 생겼습니다. 회사에서 사용하는 방법은 세션을 통한 로그인 인증방식입니다. 세션에 로그인 정보를 저장하고 이를 기반으로 로그인 여부와 유효성을 판단합니다. 세션에 저장된다고는 알고있지만, 왜 세션을 이용하는지, 언제 세션이 생성되는지는 제대로 알고 있지 않아서 공부하였습니다. 토이 프로젝트에서는 단순히 세션만 이용하는 것이 아니라, 한발 더 나아가서 세션 중복 로그인을 제한하고 새로운 로그인 시, 기존 로그인을 해제하는 방식, rememberme까지도 구현할 생각입니다. 3. Findings (배운 점) *세션과 쿠키의 등장 배경이 되는 HTTP의 특징 HTTP는 비.. 2021. 10. 25.
임시권한 부여하기 임시권한 부여를 확인하기 위해서, 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.
TIL_211022 1. Facts(사실, 객관) - Strategy 패턴을 이용해서 로그인 검사 개선하기 2. Feelings(느낌, 주관) - strategy 전략을 이용해서 수많은 if 로그인 검사를 하나의 메서드로 담아내도록 했습니다. 각 로그인 검사 클래스를 @Component로 등록하고, 하나의 추상 클래스에서 각 경우를 순차적으로 검사하여 해당 코드가 맞아떨어지면 처리하도록 했습니다. 아쉬운 것은 Java8이상에서 새롭게 추가된 스트림을 사용하지 못한 것입니다. 스트림을 사용하지 못해 for문을 통해서 검사하도록 했습니다. 약 10개의 검사 if문이 하나의 검사문으로 줄어드는 효과가 있었습니다. 변경이 있을것으로 예상되는 곳은 모두 interface를 사용하는 것이 과할 수 있겠으나, 해당 방식으로 구성하는 것.. 2021. 10. 22.
TIL_211021 1. Facts(사실, 객관) - @Secured 강의 및 정리 2. Feelings(느낌, 주관) 스프링 권한에서 @Secured 관련 강의를 들었습니다. @Secured 또한 권한을 미리 검사하는 pre쪽에 속하지만 엄연히 @PreAuthorize()와 구분되는 문법입니다. 시큐리티의 역사를 담고있는 부분이기 때문에, 지금은 잘 사용하지 않지만 내부를 알아보았습니다. 역시나 그림을 이용해서 다른 기능과 비교하면서 공부하니 훨씬 이해가 잘 되었습니다. 그냥 있는 기능을 쓰는것도 쉬운일이 아닌데, 커스터마이징을 하는 것은 더욱 어렵습니다. 내부 구현을 파악하고 있어야하며, 실제 작동하는 내부 구조에 나의 커스터마이징한 설정을 추가해주어야하기 때문입니다. 개념이 쉽지는 않았지만, 내부를 까보면서 metad.. 2021. 10. 22.
@Secured 기반 권한체크 기존에는 Expression 기반의 어노테이션을 이용한 권한체크를 하였다. 기존에는 시큐리티가 @Secured로 구축된 것이 많다. 이 권한 체크들도 내부를 분석해볼만한 가치가 있다. CustomVoter도 Secured 기반으로 만들어본다. 어노테이션을 커스텀하게 만드는 것도 추가한다. SecurityInterceptor는 filter와 method 2곳에 위치하는데, AbstractSecurityInteceptor에 공통코드가 들어가있다. Filter에서 필요한 권한 검사의 내용은 MetadataSource에 있다. (Method에 필요한 것도 Method만의 MetadataSource에 있다.) MetadataSource안에 에노테이션으로 권한을 마킹한 정보들을 configAttribute라고 한다.. 2021. 10. 20.
TIL_211019 1. Facts(사실, 객관) - 쿼리로 데이터 뽑아주기 - FETCH JOIN 사용해서 토이 프로젝트 개선 2. Feelings(느낌, 주관) - 현업에서 부쩍 쿼리요청이 늘었습니다. 혼자서 쿼리를 짜는 연습을 할때보다, 확실히 현업에 들어온 요청으로 쿼리를 짜주는 실전에서 많이 배웁니다. 요청이 올때마다 join을 통해서 새로운 조건을 추가합니다. 또한 단순히 join 뿐만 아니라 데이터를 보여주는 과정에서도 NVL이나 CASE 문을 활용하여 데이터를 정제했습니다. 여러 건을 합칠 때에는 LISTAGG도 사용했습니다. 이러다보니 JOIN에서 INNER와 OUTER조인을 좀 더 깊이 이해했습니다. 이전에 토이프로젝트를 하면서 얕게 배운 FETCH JOIN이 생각나서 내부 로직을 확인하니 INNER JO.. 2021. 10. 19.
메서드 후처리 메서드 후처리는 메서드가 결과를 리턴한 다음에 리턴된 객체를 사용자가 접근할 수 있는지 검사한다. 권한은 메서드쪽에서 MethodSecurityInterceptor를 통해서 검사한다. MethodSecurityInterceptor 에서 중요한 멤버는 아래 세가지다. AccessDecisionManager : @Secured 나 @PreAuthorize, @PreFilter 를 처리한다. (사전체크) AfterInvocationManager : @PostAuthorize, @PostFilter 를 처리한다. (사후체크) RunAsManager : 임시권한을 부여한다. AccessDecisionManager 는 Voter가 필요하여 AccessDecisionVoter가 다양한 Voter를 가지고 있지만, A.. 2021. 10. 19.
반응형