JWT
-
Delivery Together - JWT 인증방식의 로그인(3)Projects/Problem & Solution 2021. 12. 25. 21:59
개요 지금까지는 JWT의 사용 이유와 JWT의 특징을 알아보았고, 이어서 Spring Security 내에서 어떠한 절차로 인증 과정이 처리되는지 알아보았다. 이번에는 사용자가 입력한 로그인 정보를 통해 JWT를 생성해서 발급하는 과정까지 코드로 구현해보겠다. 사전 설정 1. 의존성 추가 implementation 'io.jsonwebtoken:jjwt:0.9.1' ㆍ JWT 생성을 위한 외부 라이브러리인 jjwt에 대한 의존성을 build.gradle에 추가한다. 2. JwtTokenHelper 클래스 생성 @Component public class JwtTokenHelper { private SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.H..
-
Delivery Together - JWT 인증방식의 로그인(1)Projects/Problem & Solution 2021. 12. 23. 23:50
JWT의 사용 이유 HTTP 프로토콜의 문제점 REST API가 있고 권한이 있는 사용자에게만 액세스를 제한하려고 한다는 상황을 가정해 보겠다. 가장 단순한 접근 방식은 API가 사용자 이름과 비밀번호를 요청하는 것이다. 그리고 해당 정보가 실제로 존재하는지를 데이터베이스에서 검색해 인증을 확인한다. 마지막으로 인증된 사용자에게 해당 요청을 수행할 권한이 있는지 확인한다. 두 검사 모두 통과하면 실제 API가 실행되는 것이다. 하지만 문제점이 있다. HTTP 프로토콜은 Stateless로 동작한다. 위 그림과 같이 새 요청(GET/order/42)은 이전 요청에 대해 아무것도 알지 못하기 때문에 새 요청마다 다시 인증을 해야 하는 절차가 추가된다. 즉, 새로운 요청이 있을 때마다 리소스가 소모된다는 뜻이..
-
Web - JWT란?Web/Web 2021. 10. 19. 22:18
JWT란? JWT의 정의 ㆍ JWT(Json Web Token)이란 Json 객체를 사용하여 가볍고 자가 수용적인 방식으로 정보를 안전성 있게 전달해주기 위한 토큰이다. ㆍ 주로 회원 인증이나 정보 전달에 사용된다. JWT의 구성요소 ㆍ JWT는 '.'을 구분자로 3가지의 문자열로 구성된다. ㆍ aaaaaa.bbbbbb.cccccc의 구조를 기준으로 앞부분부터 헤더(eader), 정보(payload), 서명(signature)으로 구성된다. JWT의 사용 과정 1. 브라우저에서 로그인을 수행하기 위해 username과 password를 입력한다. 2. 서버 측에서 입력받은 정보를 통해 JWT를 생성한다. 3. 서버는 브라우저에게 생성한 JWT를 전달한다. 4. 브라우저는 JWT를 가지고 서버에게 데이터를..
-
Spring Security JWT - JWT를 통한 인증Framework & Library/Spring Security 2021. 10. 10. 19:42
JWT 검증 JwtAuthorizationFilter 클래스 생성 public class JwtAuthorizationFilter extends BasicAuthenticationFilter { private UserRepository userRepository; public JwtAuthorizationFilter(AuthenticationManager authenticationManager, UserRepository userRepository) { super(authenticationManager); this.userRepository = userRepository; } @Override /** 인증이나 권한이 필요한 주소요청이 있을 때 실행되는 메서드 */ protected void doFilte..
-
Spring Security JWT - JWT 생성 후 응답Framework & Library/Spring Security 2021. 10. 10. 01:25
JwtAuthenticationFilter 클래스 수정 ㆍ JwtAuthenticationFilter 클래스의 successfulAuthentication() 메서드를 위 사진과 같이 수정한다. ㆍ successfulAuthentication() 메서드는 attemptAuthentication() 메서드가 실행되고 인증이 정상적으로 되었으면 자동으로 실행되는 메서드이다. ㆍ attemptAuthentication() 메서드에서 JWT를 생성하고 Header에 JWT 정보를 담아 클라이언트 측에 응답을 하는 방식이다. 테스트 로그인 요청 ㆍ username의 값을 "qlsdud0604"로 password의 값을 "1234"로 지정한 후 JSON 형태로 로그인 요청을 한다. Header 정보 확인 ㆍ 로그인..
-
Spring Security JWT - 로그인 인증Framework & Library/Spring Security 2021. 10. 9. 16:35
JwtAuthenticationFilter 클래스 수정 ㆍ 로그인인 인증을 수행하기 위해 JwtAuthenticationFilter 클래스의 attemptAuthentication() 메서드를 위 코드와 같이 수정한다. ㆍ 첫 번째 부분에서 전달받은 JSON 데이터를 파싱 해서 User 객체로 만든다. ㆍ 두 번째 부분에서는 파싱 된 User 객체의 username과 password를 이용해서 토큰을 생성한다. ㆍ 생성된 토큰은 로그인 인증을 위해 사용되는 토큰이다. ㆍ 세 번째 부분에서는 생성한 토큰을 이용해 AuthenticationManager 객체가 로그인을 시도한다. ㆍ 이때, PrincipalDetailsService의 loadUserByUsername() 메서드가 자동으로 실행되고, load..