Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (5) - OAuth란? / OAuth 2.0 인증 과정 예시
·
Spring/Security
본격적으로, OAuth2 로그인을 구현하기 전에, OAuth가 무엇인지 알아보고자 합니다. 1. OAuth(Open Authorization)란? OAuth의 사전적 정의는 다음과 같습니다. OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹 사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준 쉽게 말하면, 어플리케이션을 이용할 때 사용자가 해당 어플리케이션에 ID, PW등의 정보를 제공하지 않고, 신뢰할 수 있는 외부 어플리케이션(Naver, Google, Kakao, Facebook 등)의 Open API에 ID, PW를 입력하여 해당 어플리케이션이 인증 과정을 처리해주는 방식입니다. 간단한 ..
우아한테크코스 5기 1차 합격 & 최종 코딩테스트 후기
·
우아한테크코스 5기 프리코스
한동안 정신이 없었어서, 최종 코딩테스트를 보고 하루가 지난 지금 시간이 남아서 후기를 작성해보고자 한다! 0. 프리코스 4주차 이후 ~ 1차 합격 발표 전 (22.11.22 ~ 22.12.13) 처음에 프리코스 4주차가 끝나고는 뭔가 목적을 잃은 느낌이었던 것 같다. (사실, 4주차 끝난 기간이 거의 1달 전이라 그때 기억을 잃었다 ㅋㅋㅋ) 우아한테크코스 지원 당시 자소서 쓸 때부터, 프리코스 4주차까지 쉴 틈없이 달려왔기 때문에 당장 1차 합격 발표까지 3주 가량 남아있었는데 다음 미션은 나오지 않기 때문에 목적을 잃고 방황하게 되었다. 사실은 4주차 후기에도 썼던 것 같은데 4주차 때부터 미션을 받은 당일과 그 다음 날까지는 거의 하루 종일 미션을 수행하고, 미션 마감까지 나머지 4~5일은 지쳐서 ..
Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (4) - 자체 JSON 로그인 커스텀하기
·
Spring/Security
이전 챕터에서 JWT 관련 클래스와 인증 로직을 살펴봤습니다. 이번 챕터에서는 자체 JSON 로그인 관련 클래스들을 커스텀해보겠습니다. 저는 자체 로그인 시 일반 Form Login이 아닌, 아이디와 비밀번호를 JSON 형식으로 RequestBody로 보내는 로그인 방식을 구현할 것입니다. { "email" : "aaa@bbb.com" "password" : "test123" } 이런 식으로, JSON으로 Email, Password를 보내 로그인을 하는 로그인 방식을 구현할 것입니다. Spring Security에서는 일반 Form Login을 기본적으로 제공하지만, JSON 형식의 RequestBody로 하는 로그인 방식은 기본적으로 제공하지 않습니다. 따라서, JSON 로그인 방식을 사용하기 위해 ..
Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (3) - JWT 관련 클래스 생성 / JWT 인증 로직
·
Spring/Security
이전에 JWT 정의를 살펴봤다면, 이번에는 JWT 관련 클래스를 직접 생성하여 구현해보려고 합니다! 들어가기 전 JWT 패키지 구조는 다음과 같습니다. JWT 서비스를 생성하기 위해 다음과 같은 오픈 소스 라이브러리를 사용합니다! https://github.com/auth0/java-jwt GitHub - auth0/java-jwt: Java implementation of JSON Web Token (JWT) Java implementation of JSON Web Token (JWT). Contribute to auth0/java-jwt development by creating an account on GitHub. github.com 사용하기 위해, build.gradle에 아래와 같은 의존성을 ..
Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (2) - JWT란?
·
Spring/Security
이전 User 관련 클래스 생성에 이어서 다음에는 JWT 관련 클래스를 생성해보려고 합니다. JWT 관련 클래스를 생성하기 전에, JWT가 무엇인지 간단하게 살펴보고자 합니다. 1. JWT(JSON Web Token)란? JWT는 인증에 필요한 정보들을 암호화 시킨 JSON 토큰을 의미합니다. 따라서 JWT를 이용한 인증은 유저를 인증하고 식별하기 위한 Token 기반 인증입니다. JWT는 JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이고, 토큰 내부에는 개인키를 통한 전자서명이 들어있습니다. ※ Base64 URL-safe Encode란, 일반적인 Base64 Encode를 URL에서 오류 없이 사용하도록 '+'와 '/'를 각각 '-', '_'으로 표현한 것입..
Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (1) - 회원(User) 관련 클래스 생성
·
Spring/Security
들어가기 전 처음 프로젝트 진행 시, 아무것도 모르던 상태에서 처음으로 만들어야겠다고 생각이 든 기능이 로그인 기능이었습니다. 처음부터 자체 Login과 OAuth2 Login(소셜 로그인)을 같이 구현해보고 싶었지만, 그 당시에는 지식이 많이 없었기 때문에(지금도 없지만...) 먼저 자체 Login을 구현해보고 OAuth2 Login을 구현해봐야겠다고 생각을 했었습니다. 구글링을 정말 많이 해봤었는데, 자체 Login과 OAuth2 Login을 함께 서술한 블로그 글은 거의 없었습니다. 그래서 구현하기가 정말 힘들었었는데 여러 삽질을 통해 구현하게 되어 기록하고자 합니다! 물론 더 나은 방법이 있을 수도 있지만, 일단 스프링 시큐리티와 JWT를 이용하여 자체 Login과 OAuth2 Login을 함께 ..
우아한테크코스 프리코스 4주차 후기
·
우아한테크코스 5기 프리코스
우선 4주차에 들어가기 전에 3주차 공통 피드백 중 내가 지키지 못한 것들에 대해 짚으면서 4주차에서는 피드백을 수용하려고 노력했다. 또한, 메일에서 받은 4주차의 목표는 다음과 같았다. 1. 클래스(객체) 분리 2. 리팩토링 따라서 이번 4주차에서는 3주차 피드백 수용 & 4주차 목표 달성을 목표로 두고 진행했다. 3주차 공통 피드백 중 내가 지키지 못한 것들 1. 발생할 수 있는 예외 상황에 대해 고려한다. 공통 피드백에 적혀져 있는 예외 상황들은 다 예외 처리를 해줬지만, 커뮤니티를 보다보니 예외 상황이 훨씬 많았고 (ex : 엄청 많은 금액 입력, 공백 입력 등) 설계 시 생각나는 예외만 적고 이후에 추가하자는 식으로 설계를 했었는데 프로그램 구현이 끝나고는 너무 지쳐버려서 추가 예외를 생각하지 ..
우아한테크코스 프리코스 3주차 후기 & 공부한 부분
·
우아한테크코스 5기 프리코스
최종 3주차 미션 코드 우선 나의 최종 로또 게임 코드 링크는 다음과 같다. https://github.com/KSH-beginner/wooteco5th-java-lotto/tree/KSH-beginner GitHub - KSH-beginner/wooteco5th-java-lotto: 로또 미션을 진행하는 저장소 로또 미션을 진행하는 저장소. Contribute to KSH-beginner/wooteco5th-java-lotto development by creating an account on GitHub. github.com 3주차 진행 후기 이번 3주차는 처음에 시간을 많이 써서 일요일 전에 완성하고, 너무 힘을 많이 쓴 나머지 그 후에 리팩토링을 거의 진행하지 않아서 끝나고 나니 내 코드인데도 오..
Spring Security authorizeRequest.antMatchers() / 인증(Authentication) & 인가(Authorization)의 차이
·
Spring/Security
http.authorizeRequests().antMatchers(”xxx”).permitAll() http.authorizeRequests().antMatchers("/sign-up").permitAll() .anyReqeust().authenticated() ... http.addFilterAfter(jwtAuthenticationProcessingFilter(), LogoutFilter.class); 👉 ”/sign-up” URL에 대해서 permitAll()로 인가 처리를 했다. 나머지 URL에 대해서는 인증을 거친 사용자만 인가 처리를 했다. (인가 처리 : 해당 URL에 접근이 가능하도록 하는 것) 처음 Spring Security를 사용했을 때 코드를 따라치다보니 permitAll()이 무엇..
[Spring] SpringBoot 테스트 시 @WebMvcTest와 @SpringBootTest의 차이
·
Spring/기타
Junit 테스트 시에 @WebMvcTest와 @SpringBootTest를 대표적으로 사용하는데, 두 가지 Test 어노테이션의 차이가 존재한다고 한다. SpringBoot 테스트 시에 두 가지 어노테이션의 차이를 살펴보자. 먼저 Mock과 MockMvc에 대해서 알아보자. ※ Mock이란? 실제 객체를 만들어서 테스트하기가 어려운 경우에, 가짜 객체를 만들어서 테스트하는 기술이다. ※ MockMvc란? MVC에 관련된 Mock 가짜 객체를 말한다. 웹 어플리케이션을 애플리케이션 서버에 배포하지 않고, 테스트용 MVC 환경을 만들어서 요청 및 전송, 응답 기능을 제공해주는 객체이다. 대부분의 어플리케이션 기능을 테스트하기 위해서는 MockMvc 객체를 만들어서 테스트하게 되는데, MockMvc를 @Au..
BE_성하