스프링 JWT 심화 4 : 다중 토큰 발급 (Refresh)
·
Spring/Spring Security - JWT
로그인 성공 시 다중 토큰 발급과 발급 위치로그인이 성공하면 기존에 단일 토큰만 발급해지만 Access/Refresh 에 해당하는 다중 토큰을 발급해야 한다. 따라서 로그인이 성공한 이후 실행되는 successfulAuthentication() 메소드 또는 AuthenticationSuccessHandler를 구현한 클래스에서 2개의 토큰을 발급한다. 각각의 토큰은 생명주기와 사용처가 다르기 때문에 심화 2에서와 같이 서로 다른 저장소에 발급한다.Access : 헤더에 발급 후 프론트에서 로컬 스토리지 저장Refresh : 쿠키에 발급로그인 성공 핸들러성공 루틴@Overrideprotected void successfulAuthentication(HttpServletRequest request, Http..
스프링 JWT 심화 3 : 기반 프로젝트
·
Spring/Spring Security - JWT
프로젝트 파일이전에 진행했던 프로젝트기반 코드에서 변경될 부분로그인 성공 핸들러JWT 검증 필터
스프링 JWT 심화 2 : 보안을 위한 JWT 진화
·
Spring/Spring Security - JWT
1. 토큰 사용 추적"Spring Security JWT" 시리즈를 통해 구현한 단일 토큰의 사용처를 추적하면 아래와 같다. 로그인 성공 JWT 발급 : 서버 측 -> 클라이언트로 JWT 발급권한이 필요한 모든 요청 : 클라이언트 -> 서버 측 JWT 전송 권한이 필요한 요청은 서비스에서 많이 발생한다. (회원 CRUD, 게시글/댓글 CRUD, 주문 서비스, 등등)따라서 JWT는 매시간 수많은 요청을 위해 클라이언트의 JS  코드로 HTTP 통신을 통해 서버로 전달된다. 해커는 클라이언트 측에서 XSS를 이용하거나 HTTP 통신을 가로채서 토큰을 훔칠 수 있기 때문에 여러 기술을 도입하여 탈취를 방지하고 탈취되었을 경우 대비 로직이 존재한다.2. 다중 토큰 : Refresh 토큰과 생명주기위와 같은 문제..
스프링 JWT 심화 1 : 실습 목표
·
Spring/Spring Security - JWT
실습 목표스프링 시큐리티 단일  JWT 발급을 넘어 보안을 위한 여러가지 심화적인 구현 방법을 알아본다.
Spring Security JWT 13 : CORS 설정
·
Spring/Spring Security - JWT
자료CORS | 스프링 시큐리티 공식 자료 바로가기 CORS :: Spring SecuritySpring Framework provides first class support for CORS. CORS must be processed before Spring Security, because the pre-flight request does not contain any cookies (that is, the JSESSIONID). If the request does not contain any cookies and Spring Security isdocs.spring.io CORS란교차 출처 리소스 공유 위키피디아 바로가기 교차 출처 리소스 공유 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백..
Spring Security JWT 12 : 세션 정보
·
Spring/Spring Security - JWT
JWTFilter를 통과한 뒤 세션 확인@Controller@ResponseBodypublic class MainController { @GetMapping("/") public String mainP() { String name = SecurityContextHolder.getContext().getAuthentication().getName(); return "Main Controller : "+name; }}세션 현재 사용자 아이디SecurityContextHolder.getContext().getAuthentication().getName();세션 현재 사용자 roleAuthentication authentication = SecurityContextHol..
Spring Security JWT 7 : 로그인 필터 구현
·
Spring/Spring Security - JWT
JWT 검증 필터스프링 시큐리티 filter chain에 요청에 담긴 JWT를 검증하기 위한 커스텀 필터를 등록해야 한다. 해당 필터를 통해 요청 헤더 Authorization 키에 JWT가 존재하는 경우 JWT를 검증하고 강제로 SecurityContextholder에 세션을 생성한다. (이 세션은 STATELESS 상태로 관리되기 때문에 해당 요청이 끝나면 소멸된다.)JWTFilter 구현JWTFilterpublic class JWTFilter extends OncePerRequestFilter { private final JWTUtil jwtUtil; public JWTFilter(JWTUtil jwtUtil) { this.jwtUtil = jwtUtil; } @O..
Spring Security JWT 10 : 로그인 성공 JWT 발급
·
Spring/Spring Security - JWT
로그인 성공7~9 강을 통해 로그인 로직, JWTUtil 클래스를 생성하였다. 이제 로그인이 성공했을 경우 JWT를 발급하기 위한 구현을 진행한다.JWTUtil 주입LoginFilter : JWTUtil 주입public class LoginFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; //JWTUtil 주입 private final JWTUtil jwtUtil; public LoginFilter(AuthenticationManager authenticationManager, JWTUtil jwtUtil) { this.auth..
Spring Security JWT 9 : 발급 및 검증 클래스
·
Spring/Spring Security - JWT
JWT 발급과 검증로그인시 -> 성공 -> JWT 발급접근시 -> JWT 검증JWT에 관해 발급과 검증을 담당할 클래스가 필요하다. 따라서 JWTUtil이라는 클래스를 생성하여 JWT 발급, 검증 메소드를 작성한다.JWT생성 원리JWT.IO 공식 홈페이지https://jwt.io/ JWT.IOJSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.jwt.io문자열 형태가 있는데 . 을 기준으로 Header.Payload.Signature 구분 -> 외부에 데이터 전달. JWT는 Header.Payload.Signature 구조로 이루어져 있다. 각 요소는..
Spring Security JWT 8 : DB기반 로그인 검증 로직
·
Spring/Spring Security - JWT
DB 기반 로그인 검증이번에는 DB에서 AuthenticationManager까지 로직을 구현한다. 구현은 UserDetails, UserDetailsService, UserRepository의 회원 조회 메소드를 진행한다.UserRepositoryUserRepositorypackage com.example.springjwt.repository;import com.example.springjwt.entity.UserEntity;import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository { Boolean existsByUsername(String usern..