반응형

Java Backend 개발자 되기/Spring Security 8

JwtAuthorizationFilter에 try ~ catch 문이 있고, 없고의 차이

Spring Security 기반의 애플리케이션에 아이디/패스워드 로그인 인증 후, 전달 받은 JWT를 이용해 서버 측 리소스에 접근한다고 가정해 봅시다.이 경우, 매 요청마다 JWT를 request header에 포함해서 요청 전송을 할텐데요.이 JWT를 JwtAuthorizationFilter가 검증할 경우, 두 가지 케이스를 테스트 해 보았습니다. JwtAuthorizationFilter에서 인증이나 접근 권한 등의 예외를 try ~ catch로 잡는 경우public class JwtVerificationFilter extends OncePerRequestFilter { private final JwtTokenizer jwtTokenizer; private final CustomAutho..

Spring Security OAuth 2 컴포넌트 요약

1️⃣ OAuth2LoginAuthenticationFilter OAuth 2 인증을 처리하기 위한 Filter 2️⃣ CommonOAuth2Provider 신뢰할 만한 OAuth 2 Provider 목록 제공 실질적으로 각 Provider에게 넘겨줘야 되는 Client 정보를 포함한 ClientRegistration 객체를 생성한다. 3️⃣ ClientRegistration 각 OAuth 2 Provider 사용을 위해 Client에게 필요한 등록 정보 public enum CommonOAuth2Provider { GOOGLE { @Override public Builder getBuilder(String registrationId) { ClientRegistration.Builder builder =..

JWT를 이용한 인증(Authentication) 및 자격 검증(Authorization) 프로세스

Spring Security에서 JWT를 발급 받는 방법은 크게 두 가지로 볼 수 있습니다. 첫째는 구글 검색을 통해서도 흔히 볼 수 있는 Controller를 이용해서 아이디/패스워드 로그인 후, JWT를 발급 받는 방식이고, 두 번째는 Spring Security에서 지원하는 Security Filter를 확장하는 방법입니다. Controller를 이용하는 것이 안좋은 방법이라고 보기는 힘들지만 그래도 Spring Security라는 보안 프레임워크를 사용하는 개발자 입장에서는 Controller까지 request가 전달되기 전에 Security Filter 레벨에서 인증을 처리하는 것이 조금 더 자연스럽지 않을까하는 생각을 해보게 됩니다. 이번 글에는 구체적인 코드는 없지만 JWT를 이용해 어떤식으..

JWT 자격 검증 시, SecurityContext는 언제 비워(clear)질까?

클라이언트 쪽에서 전송한 username과 password에 대한 인증을 처리하는 JwtAuthenticationFilter(UsernamePassworAuthenticationFilter를 확장)에서 로그인 인증에 성공한 뒤, JWT를 클라이언트 쪽에 응답으로 전달했다고 가정해 봅시다. 이제 클라이언트는 백엔드 애플리케이션의 API 엔드포인트를 이용할 때 마다 백엔드 애플리케이션으로부터 전달 받은 JWT를 header에 포함시켜 request를 전송합니다. 만약 JWT를 검증하는 필터인 JwtVerificationFilter가 구현되어 있는 상태라면 백엔드 애플리케이션에서는 이 JwtVerificationFilter를 이용해 클라이언트의 request header 등에 포함된 JWT를 검증하는 처리를 ..

Spring Security에서의 권한 부여 (Authorization) 처리 흐름

Spring Security Filter Chain에서 URL을 통해 사용자의 액세스를 제한하는 권한 부여 Filter는 바로 AuthorizationFilter 이다. SecurityContextHolder로 부터 Authentication을 획득 SecurityContextHolder로 부터 획득한Authentication과 HttpServletRequest를 AuthorizationManager에게 전달 AuthorizationManager는 권한 부여 처리를 총괄하는 매니저 역할을 한다. RequestMatcherDelegatingAuthorizationManager는 AuthorizationManager를 구현하는 구현체 중 하나이다. RequestMatcherDelegatingAuthoriza..

Spring Security에서의 인증(Authentication) 처리 흐름

UsernamePasswordAuthenticationFilter 는 Username/Password 기반의 인증 요청을 처리한다. UsernamePasswordAuthenticationToken 생성 아직 인증되지 않은 Authentication 객체 AuthenticationManager는 인증 처리를 총괄하는 매니저 역할을 하는 인터페이스. ProviderManager는 AuthenticationManager를 구현한 구현 클래스 UserDetails는 사용자의 자격을 증명해주는 크리덴셜(Credentials) 과 권한 정보를 가지고 있는 객체. UserDetailsService가 사용자의 Credential과 권한 정보를 조회해서 UserDetails 를 생성. UserDetailsService가..

메시지 암호화에 대한 짧은 이야기

우리가 일반적으로 생각하는 대표적인 암호화의 대상은 크리덴셜(Credential)의 한 종류인 패스워드입니다. 패스워드는 암호화의 대상인 메시지를 조금 더 구체적으로 표현한 것이라고 볼 수 있을테구요. 이번 시간에는 암호화에 대한 아주 쉬운 이야기를 짧게 해보려고 합니다. 암호화란 무엇인지 암호화 유형에는 기본적으로 어떤것이 있는지 등을 아주 쉽게 이해할 수 있도록 짧게 정리해 보겠습니다. 암호화란? 사용자의 민감한 정보를 보호하기 위한 기술 Crypto 또는 Cipher라는 비슷한 용어가 있음 Ciphertext: 암호화 된 텍스트 Cryptography 암호학적 관점에서의 암호화 전체를 아우르는 말 Crypto Currency 암호 화폐 Encryption / Decryption 암호학 관점에서의 데..

반응형