Spring Security

Spring/Security

[Spring Security] CORS 설정 시 응답 헤더 없는 오류

프론트-서버 간의 CORS 문제 해결을 하기위해 Spring Security 설정을 진행했다. @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .cors() // cors 설정 .and() ... return http.build(); } @Bean CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList("", "...")); configuration.setAllowedMeth..

Spring/Security

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (9) - JWT 자체 로그인 & OAuth2 Login 동작 테스트

앞서 8번 과정까지해서 구현 코드 설명은 모두 끝났습니다! 이번에는 마지막으로 실제 DB에 회원 가입, 로그인이 되는지 Postman으로 동작 테스트를 해보겠습니다. 💻 index.html 생성 자체 Login은 Postman으로 테스트하도록 하고, OAuth2 로그인을 테스트하기 위해 index.html을 생성해서 테스트해봤습니다. (메인 화면으로 띄우기 위해 위치는 src/main/resources/static에 생성하였습니다.) 🎯 index.html 코드 Kakao Login Google Login Naver Login 이런 식으로 링크를 클릭하면 "/oauth2/authorization/SocialType" URL로 요청을 보내도록 했습니다. 해당 링크로 요청을 보내면, 302 redirect로..

Spring/Security

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (8) - SecurityConfig 설정 클래스 생성

이제 앞에서 했던 자체 Login 필터와 OAuth2 Login 필터 등 Spring Security의 여러 설정을 담당하는 SecurityConfig 클래스를 생성해보려고 합니다! Spring Security의 설정 파일이라고 생각하면 됩니다! 위치는 global/config에 생성해줬습니다. SecurityConfig 클래스 생성 전체 코드를 먼저 보여드리고, 전체 코드가 상당히 길기 때문에 부분 부분 코드를 발췌하여 설명드리겠습니다. 🎯 SecurityConfig 전체 코드 package login.oauthtest4.global.config; import com.fasterxml.jackson.databind.ObjectMapper; import login.oauthtest4.domain.user..

Spring/Security

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (6) - OAuth 2.0 로그인 구현 사전 설정

OAuth의 개념도 알아 보았고, 이제부터 본격적으로 OAuth 2.0 로그인을 구현해보려고 합니다. 바로 코드로 들어가기 전에, OAuth 2.0 로그인 구현 전에 기능을 이용하고자 하는 Resource Server에 Application 사전 등록을 해줘야합니다. 제 프로젝트에서는 네이버/카카오/구글 로그인을 구현했습니다. 따라서, 네이버/카카오/구글 Resource Server에 제 프로젝트 서비스(Application)를 등록해보겠습니다. 1. Naver에 Application 등록 https://developers.naver.com/apps/#/register 애플리케이션 - NAVER Developers developers.naver.com 위의 네이버 개발자 센터 -> Application ..

Spring/Security

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (5) - OAuth란? / OAuth 2.0 인증 과정 예시

본격적으로, OAuth2 로그인을 구현하기 전에, OAuth가 무엇인지 알아보고자 합니다. 1. OAuth(Open Authorization)란? OAuth의 사전적 정의는 다음과 같습니다. OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹 사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준 쉽게 말하면, 어플리케이션을 이용할 때 사용자가 해당 어플리케이션에 ID, PW등의 정보를 제공하지 않고, 신뢰할 수 있는 외부 어플리케이션(Naver, Google, Kakao, Facebook 등)의 Open API에 ID, PW를 입력하여 해당 어플리케이션이 인증 과정을 처리해주는 방식입니다. 간단한 ..

Spring/Security

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (4) - 자체 JSON 로그인 커스텀하기

이전 챕터에서 JWT 관련 클래스와 인증 로직을 살펴봤습니다. 이번 챕터에서는 자체 JSON 로그인 관련 클래스들을 커스텀해보겠습니다. 저는 자체 로그인 시 일반 Form Login이 아닌, 아이디와 비밀번호를 JSON 형식으로 RequestBody로 보내는 로그인 방식을 구현할 것입니다. { "email" : "aaa@bbb.com" "password" : "test123" } 이런 식으로, JSON으로 Email, Password를 보내 로그인을 하는 로그인 방식을 구현할 것입니다. Spring Security에서는 일반 Form Login을 기본적으로 제공하지만, JSON 형식의 RequestBody로 하는 로그인 방식은 기본적으로 제공하지 않습니다. 따라서, JSON 로그인 방식을 사용하기 위해 ..

Spring/Security

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (3) - JWT 관련 클래스 생성 / JWT 인증 로직

이전에 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

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (2) - JWT란?

이전 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

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (1) - 회원(User) 관련 클래스 생성

들어가기 전 처음 프로젝트 진행 시, 아무것도 모르던 상태에서 처음으로 만들어야겠다고 생각이 든 기능이 로그인 기능이었습니다. 처음부터 자체 Login과 OAuth2 Login(소셜 로그인)을 같이 구현해보고 싶었지만, 그 당시에는 지식이 많이 없었기 때문에(지금도 없지만...) 먼저 자체 Login을 구현해보고 OAuth2 Login을 구현해봐야겠다고 생각을 했었습니다. 구글링을 정말 많이 해봤었는데, 자체 Login과 OAuth2 Login을 함께 서술한 블로그 글은 거의 없었습니다. 그래서 구현하기가 정말 힘들었었는데 여러 삽질을 통해 구현하게 되어 기록하고자 합니다! 물론 더 나은 방법이 있을 수도 있지만, 일단 스프링 시큐리티와 JWT를 이용하여 자체 Login과 OAuth2 Login을 함께 ..

Spring/Security

Spring Security authorizeRequest.antMatchers() / 인증(Authentication) & 인가(Authorization)의 차이

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()이 무엇..

BE_성하
'Spring Security' 태그의 글 목록