
OAuth 로직은 모두 완성되었고, 글에 글쓴이 추가하는 작업을 진행 01. Article.java에 author 변수 추가 Article.java @Column(name = "author", nullable = false) private String author; @Builder // 빌더 패턴 객체 생성 public Article(String author, String title, String content) { this.author = author; this.title = title; this.content = content; } 02. DTO에 toEntity() 메서드 추가하고 author 값 추가 저장 AddArticleRequest.java public Article toEntity(Stri..

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) { // 새로운 쿠키 객체를 생성함. 이름과 값..

OAuth - 제3의 서비스에 계정 관리를 맡기는 방식 - OAuth를 사용하면 인증 서버에서 발급받은 토큰을 사용해서 리소스 서버에 리소스 오너의 정보를 요청하고 응답받아서 사용할 수 있다. [관련 용어] 리소스 오너(resource owner) : 자신의 정보를 사용하도록 인증 서버에 허가하는 주체. 서비스를 이용하는 사용자가 리소스 오너에 해당 리소스 서버(resource server) : 리소스 오너의 정보를 가지며, 리소스 오너의 정보를 보호하는 주체를 의미 ex. 네이버, 구글, 페이스북 인증 서버(authorization server) : 클라이언트에게 리소스 오너의 정보에 접근할 수 있는 토큰을 발급하는 역할을 하는 애플리케이션을 의미 클라이언트 애플리케이션(client applicatio..

토큰 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 ..