본문 바로가기

개발중/JSON Web Tokens (JWT)

(4)
[JWT🔒] JWT(Json Web Token) JWT(Json Web Token)은 JSON 객체를 통해 안전하게 정보를 전송할 수 있는 웹표준(RFC7519) 입니다. JWT는 '.'을 구분자로 세 부분으로 구분되어 있는 문자열로 이루어져 있습니다. 각각 헤더는 토큰 타입과 해싱 알고리즘을 저장하고, 내용은 실제로 전달할 정보, 서명에는 위변조를 방지하기위한 값이 들어가게 됩니다. JWT는 JSON 객체를 암호화 하여 만든 문자열 값으로 위, 변조가 어려운 정보라고 할 수 있습니다. 다른 토큰들과 달리 토큰 자체에 데이터를 가지고 있다는 특징이 있습니다. JWT의 이러한 특징 때문에 사용자의 인증 요청시 필요한 정보를 전달하는 객체로 사용할 수 있습니다. API 서버는 로그인 요청이 완료되면 클라이언트에게 회원을 구분할 수 있는 정보를 담은 JWT..
[JWT🔒] Spring Security Filter 실제로 스프링 시큐리티는 훨씬 다양한 필터체인을 사용하여 다양한 커스터마이징을 할 수 있도록 돕습니다. SecurityContextPersistentFilter SecurityContextRepository에서 SecurityContext를 가져와서 SecurityContextHolder에 주입하거나 반대로 저장하는 역할을 합니다. LogoutFilter logout 요청을 감시하며, 요청시 인증 주체(Principal)를 로그아웃 시킵니다. UsernamePasswordAuthenticationFilter login 요청을 감시하며, 인증 과정을 진행합니다. DefaultLoginPageGenerationFilter 사용자가 별도의 로그인 페이지를 구현하지 않은 경우, 스프링에서 기본적으로 설정한 로그..
[JWT🔒] 스프링 시큐리티의 구조 스프링 시큐리티는 주로 서블릿 필터와 이들로 구성된 필터체인을 사용하고 있습니다. 실제 로그인 시에 스프링 시큐리티의 동작 플로우를 바탕으로 인증과 관련된 스프링 시큐리티의 아키텍쳐를 알아 보도록 하겠습니다. 사용자가 로그인 정보와 함께 인증 요청(Http Request) AuthenticationFilter가 이 요청을 가로챕니다. 이 때 가로챈 정보를 통해 UsernamePasswordAuthenticationToken이라는 인증용 객체를 생성합니다. AuthenticationManager의 구현체인 ProviderManager에게 UsernamePasswordAuthenticationToken 객체를 전달합니다. 다시 AuthenticationProvider에 UsernamePasswordAuthe..
[JWT🔒] 인증(Authentication)과 권한(Authorization) 먼저 스프링 시큐리티에서 애플리케이션 보안을 구성하는 두 가지 영역으로 나뉘어 있습니다. 이 두 영역은 사실상 스프링 시큐리티의 핵심이라고 볼 수 있습니다. 인증(Authentication) 인증(Authentication)은 보호된 리소스에 접근하는 대상, 즉 사용자에게 적절한 접근 권한이 있는지 확인하는 일련의 과정을 의미합니다. 이 때 보호된 리소스에 접근하는 대상(사용자)을 접근 주체(Principal)이라고 합니다. 권한(Authorization) 권한(Authorization)은 인증절차가 끝난 접근 주체가 보호된 리소스에 접근 가능한지를 결정하는 것을 의미합니다. 이 때 권한을 부여하는 작업을 인가(Authorize)라고 합니다. 쉽게 말하면 인증은 아이디와 비밀번호를 입력 받아 로그인 하는..