목록SpringBoot [예제] 블로그 만들기/시큐리티, JWT 입히기 (8)
코드 그라데이션
1. 의존성 추가하기 build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' } 2. 쿠키 관리 클래스 구현하기 - 앞으로 쿠키를 사용할 일이 자주 생기는데, 유틸리티로 사용할 쿠키 관리 클래스를 미리 구현해 둔다. util.CookieUtil.java public class CookieUtil { // 요청값(이름, 값, 만료 기간)을 바탕으로 쿠키 추가 public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) { // 새로운 쿠키 객체를 생성함. 이름과 값..
토큰 API 구현하기 - 여기서는 리프레시 토큰을 전달방ㄷ아 검증하고, 유효한 리프레시 토큰이라면 새로운 액세스 토큰을 생성하는 토큰 API를 구현한다. - 토큰 서비스, 컨트롤러를 차례대로 구현한다. 1. 토큰 서비스 추가하기 - 리프레시 토큰을 전달받아 토큰 제공자를 사용해 새로운 액세스 토큰을 만드는 클래스 1-1. UserService 에 findById() 추가하기 @RequiredArgsConstructor @Service public class UserService { private final UserRepository userRepository; public Long save(AddUserRequest dto) { BCryptPasswordEncoder encoder = new BCrypt..
절차 의존성, 토큰 제공자 추가 -> 리프레시 토큰 도메인, 토큰 필터 추가 여기서 만든 클래스들은 다음 장 OAuth에서 사용한다. 의존성 추가하기 build.gradle dependencies { implementation 'io.jsonwebtoken:jjwt:0.9.1' implementation 'javax.xml.bind:jaxb-api:2.3.1' testAnnotationProcessor 'org.projectlombok:lombok' testImplementation 'org.projectlombok:lombok' } 토큰 제공자 추가하기 1. 이슈 발급자, 비밀키 설정 application.yml spring: jpa: show-sql: true properties: hibernate:..
JWT - 발급받은 JWT를 이용해 인증 하려면 HTTP 요청 헤더 중에 Authorization 키값에 Bearer + JWT 토큰값을 넣어서 보내야 한다. JWT는 . 을 기준으로 헤더(header), 내용(payload), 서명(signature)으로 이루어져 있다. 헤더에는 토큰의 타입과 해싱 알고리즘을 지정하는 정보를 담는다. 헤더의 구성 내용에는 토큰과 관련된 정보를 담는다. 내용의 한 덩어리를 클레임claim이라고 부르며,클레임은 키값의 한 쌍으로 이루어져 있다. 클레임은 등록된 클레임, 공개 클레임, 비공개 클레임으로 나눌 수 있다. 등록된 클레임(registered claim)은 토큰에 대한 정보를 담는 데 사용한다. 공개 클레임(Public claim)은 공개되어도 상관없는 클레임을 의..
세션 기반 인증과 토큰 기반 인증 앞 장인 ‘스프링 시큐리티로 로그인/로그아웃,회원가입 구현하기’에서는 기본적으로 제공해주는 세션 기반 인증을 사용해 사용자마다 사용자의 정보를 담은 세션을 생성하고 저장해서 인증을 한다. 이를 세션 기반 인증이라고 한다. 토큰 기반 인증은 토큰을 사용하는 방법이다. 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값인데 서버가 토큰을 생성해서 클라이언트에게 제공하면, 클라이언트는 이 토큰을 갖고 있다가 여러 요청을 이 토큰과 함께 신청한다. 그럼 서버는 토큰만 보고 유효한 사용자인지 검증한다 토큰을 전달하고 인증 받는 과정 토큰은 요청과 응답에 함께 보낸다. [그림] ➊ 클라이언트가 아이디와 비밀번호를 서버에게 전달하면서 인증을 요청하면 ➋ 서버는 아이디와 비밀번호를 ..
시큐리티 설정하기 WebSecurityConfig.java // 시큐리티 설정하기 @RequiredArgsConstructor @Configuration public class WebSecurityConfig { private final UserDetailService userService; // 1. 스프링 시큐리티 기능 비활성화 @Bean public WebSecurityCustomizer configure() { return (web) -> web.ignoring() .requestMatchers(toH2Console()) .requestMatchers("/static/**"); } // 2. 특정 HTTP 요청에 대한 웹 기반 보안 구성 @Bean public SecurityFilterChain ..
스프링 시큐리티 사용하여 인증 인가 구현하기 순서: 회원 엔티티 -> 리포지토리 -> 서비스 1. 의존성 추가 build.gradle dependencies { // 스프링 시큐리티를 사용하기 위한 스타터 추가 implementation 'org.springframework.boot:spring-boot-starter-security' // 타임리프에서 스프링 시큐리티를 사용하기 위한 의존성 추가 implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' // 스프링 시큐리티를 테스트하기 위한 의존성 추가 testimplementation 'org.springframework.security:spring-security-test' } 2..
스프링 시큐리티 스프링 기반의 애플리케이션 보안(인증,인가,권한)을 담당하는 스프링 하위 프레임워크. 스프링 시큐리티를 이해하려면 인증과 인가에 대한 개념을 알아야 한다. 인증과 인가 인증 인증(authentication)은 사용자의 신원을 입증하는 과정. 예를 들어 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정. 인가(authchzation)와는 다르다 인가 인가는 사이트의 특정 부분에 접근할 수 있는지에 권한을 확인하는 작업. 예를 들어 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없는 것. 이런 권한을 확인하는 과정을 인가라고 한다. 스프링 시큐리티 스프링 시큐리티는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크. 보안 관련 옵션..