13. Custom Classes for OAuth2 Authentication OAuth2 Authentication을 위해 사용하는 custom classes는 다음과 같습니다. 13-1) HttpCookieOAuth2AuthorizationRequestRepository HttpCookieOAuth2AuthorizationRequestRepository는 authorization request를 cookie에 save 및 retireve 하기위해 사용됩니다. HttpCookieOAuth2AuthorizationRequestRepository @Component public class HttpCookieOAuth2AuthorizationRequestRepository implements Authori..
11. Security Configuration 다음으로 Security Configuration을 생성하겠습니다. SecurityConfig @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity( securedEnabled = true, jsr250Enabled = true, prePostEnabled = true ) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomUserDetailsService customUserDetailsService; @Autowired private CustomOAuth2UserService custom..
이번 글에서는 Spring Boot App에서 Spring Security와 JWT를 사용해 Goolgle Login 기능을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Intro 이번글의 모든 내용은 이 글을 참고하였습니다. 😎 저는.. 위의 글을 읽으면서 전체 프로젝트의 구조를 이해하고, 내용을 이해하는데 굉장히 오랜시간이 걸렸습니다. Spring Security 시리즈를 작성하게된 이유도, Google Login의 흐름을 이해하기 위해서 입니다. 😅 물론, 아직도 이해가 안되는 부분이 있지만.. 혹시 포트폴리오를 위해 구글/네이버 로그인 등을 적용하시려거든, 반드시 Spring Security가 어떻게 작동하는 것인지 먼저 학습하시는 것을 추천드립니다. 2. Project Structure 먼..
이번 글에서는 Spring Boot App에서 JWT를 사용해 Authenticaiton과 Authorization을 수행하는 방법에 대해 알아보도록 하겠습니다. 1. JWT JWT에 관한 내용은 이글을 참고하시길 바랍니다. 이번글에서는 하나의 Spring Boot App에서 Authenticatoin과 Authorization을 같이 수행하도록 하겠습니다. 1-1) sample application 이번글에서 사용할 RestController는 다음과 같습니다. JWT는 주로 API Server에 사용되므로, View 단은 다루지 않겠습니다. Rest API @RestController @RequestMapping("api/public") @RequiredArgsConstructor @CrossOrig..
이번 글에서는 Thymeleaf와 Spring Security를 Integeration하는 방법에 대해 알아보도록 하겠습니다. 1. Consider Security & View 이번글에서는 이전글에서 Thymeleaf로 작성한 page에 spring security를 integration 해보도록 하겠습니다. 실제 서비스되는 어플리케이션에서는 다음과 같이 security를 고려한 view를 작성할 수 있습니다. • 로그인/비로그인 사용자 별로 show/hide 할 content를 구분합니다. • ROLE/Permission 별로 show/hide 할 content를 구분합니다. • 로그인한 사용자의 이름/permissions을 display합니다. 2. Thymeleaf Integeration 위와 같은..
이번 글에서는 Form Authentication을 customize 하는 방법에 대해 알아보도록 하겠습니다. 1. Default Parameter 이번글에서는 이전글에 적용했던 Form Authentication의 defualt parameter를 customize 해보도록 하겠습니다. 이전에 사용한 spring security의 form authentication default parameter는 다음과 같습니다. • /login • username • password • remember-me 이를 아래와 같이 변경해보도록 하겠습니다. • /signin • txtUsername • txtPassword • checkRememberMe 2. Customize Login Page 먼저 기존 login p..
이번 글에서는 Spring Boot App에 Form Authentication을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Form Authentication 이번에는 이전글에서 생성한 spring boot app에 Form Authentication을 적용해보겠습니다. 이전까지는 사용자가 로그인할때 위와 같이 브라우저에서 직접 로그인창을 띄워 아이디와 비밀번호를 입력했습니다. 이러한 인증 방법을 Http Basic Authentication이라고하며, 이를 사용하기위해 위와 같이 SecurityConfiguration에 httpBasic( )을 정의했습니다. 이번에는 이를 개선해 Thymeleaf로 Login Page를 직접 만들어서 인증을 구현해보겠습니다. 2. Form Login Page ..
이번 글에서는 Spring Boot App에 Database Authentication을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Database Authentication 이번에는 이전글에서 생성한 spring boot app에 Database Authentication을 적용해보겠습니다. 이전글에서는 아래와 같이 WebSecurityConfigurerAdapter를 상속한 SecurityConfiguration에 InMemory Authentication에 사용할 유저 정보를 일일이 입력해두었습니다. SecurityConfiguriaton @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception..
이번 글에서는 Spring Boot App에 SSL/HTTPS를 적용하는 방법에 대해 알아보도록 하겠습니다. 1. SSL/HTTPS SSL/HTTPS 개념은 이 글에서 확인하시길 바랍니다. 😎 Spring Boot App에 SSL/HTTPS를 적용하기위해선 아래와 같은 절차를 수행하게 됩니다. 순서대로 살펴보겠습니다. • Get SSL Certificate • Modify application.yml • Add ServletWebServerFactory as @Bean 1-1) get SSL certificate 저는 Self Signed SSL Certificate를 사용하겠습니다. 먼저 윈도우 기준으로 cmd 창을 관리자 권한으로 열어 jdk의 bin directory로 이동합니다. 다음으로 아래의 ..
이번 글에서는 Spring Boot App에 Authority Based Authorization을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Authority Based Authorization 이번에는 이전글에서 생성한 spring boot app에 Authority Based Authorization을 적용해보겠습니다. authority based authorization을 사용하면, role based 보다 세분화하여 사용자들의 접근을 제한할 수 있습니다. 실제로 application을 운영할때에는 대부분 authority base로 authorization을 수행합니다. 간단히 Role은 여러개의 authority가 조합된 덩어리라고 생각할 수 있습니다. 😎 1-1) overall 아래와..
이번 글에서는 Spring Boot App에 Role Based Authorization을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Role Based Authorization 이번에는 이전글에서 생성한 spring boot app에 Role Based Authorization을 적용해보겠습니다. 앞서 생성했던 app에서는 사용자의 ROLE에 관계없이 모든 resource에 접근이 가능했습니다. 하지만, 실제 운영 환경에서는 사용자의 ROLE 별로 접근 가능한 resource가 달라야 하므로 이를 적용해보도록 하겠습니다. 1-1) overall 아래와 같이 SecurityConfiguration를 변경합니다. SecurityConfiguration @Configuration @EnableWebS..
이번 글에서는 Spring Boot App에 HTTP Basic Authentication을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. HTTP Basic Authentication 이번에는 이전글에서 생성한 spring boot app에 HTTP Basic Authentication을 적용해보도록 하겠습니다. 1-1) overall HTTP Basic Authentciation은 spring-security에서 제공해주는 default configuartion이 아니므로, 사용자가 직접 아래와 같이 custom security configuration을 생성해야 합니다. SecurityConfiguration @Configuration @EnableWebSecurity public class S..
이번글에서는 Spring Security의 Default Configuartion에 대해 알아보도록 하겠습니다. 1. Unsecured Spring Boot App 이번글에서 사용한 source code는 여기에서 확인할 수 있습니다. 먼저 현재 프로젝트의 구조는 다음과 같습니다. 1-1) dependency build.gradle plugins { id 'org.springframework.boot' version '2.2.5.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' } group = 'com.tutorial' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1..
이번글에서는 SSL과 HTTPS에 대해 알아보도록 하겠습니다. 1. SSL & HTTPS HTTPS란 기존의 HTTP 프로토콜에 SSL이라는 Security Layer를 한층 올린 통신 프로토콜입니다. 따라서 기본적인 통신 원리는 기존의 HTTP와 동일하며, endpoints 간에 data를 주고받을때 secure하게 data를 주고받는다는 점이 다릅니다. 1-1) http 기존의 http는 보안상의 문제점이 존재했습니다. 😅 예를 들어 위와 같이 두 endpoints 간의 credentails한 data를 transfer 하는 경우, 악의적인 공격자가 해당 data를 탈취해 악용할 가능성이 존재했습니다. 1-2) https 따라서 이를 개선하기 위해 https가 등장하게 되었습니다. 😎 https는 e..
이번글에서는 Spring Security의 JWT Authentication에 대해 알아보도록 하겠습니다. 1. JWT Authentication이란? digitally signed된 token을 전달해 사용자를 인증하는 방식입니다. 이때 사용되는 token을 JSON Web Token(JWT)이라고 하며, 이는 apps 간의 data를 transmit하는데 compact하고 safe한 방법을 제공합니다. 1-1) login process login process는 다음과 같습니다. • client는 Auth Server에 로그인을 합니다. 이때 Auth Server는 application server 내에 위치할 수도 있으며, facebook, goole과 같은 제 3자가 될 수 도 있습니다. • Au..
이번글에서는 Spring Security의 Form Based Authentication에 대해 알아보도록 하겠습니다. 1. Form Based Authentication이란? web application이 작성한 HTML 페이지에 credentails 정보를 입력해 사용자를 인증하는 방식입니다. HTTP Basic Auth와 달리 사용자가 입력한 credential data는 POST 방식으로 web server에 전달되며, 전달된 form data를 사용해 인증을 구현하는 mechanism은 web application이 responsible을 가지게됩니다. 1-1) login process login process는 다음과 같습니다. • cleint가 접근이 제한된 GET /home request를..
이번글에서는 Spring Security의 HTTP Basic Authentication에 대해 알아보도록 하겠습니다. 1. HTTP Basic Authentication이란? 특정 resource에 대한 접근을 요청할때 브라우저가 사용자에게 username과 password를 확인해 인가를 제한하는 방법입니다. 1-1) process 전체적인 process는 아래와 같습니다. • 접근이 제한된 GET /home request를 client가 요청합니다. • server는 401 Unauthorized 에러와 함께, username과 password를 요청합니다. • browser는 사용자에게 username과 password를 입력받아 다시 동일한 GET /home resource를 요청합니다. • 이..
이번글에서는 Spring Security의 Authorities와 Role에 대해 알아보도록 하겠습니다. 1. Authorities & Role Srping Security에서 Authorities와 Role은 인가된 사용자들에게 부여된 권한들을 표현하는데 사용됩니다. 차이점으로는 Authorities는 기능 단위의 permission을 의미하며 작명 규칙은 따로 존재하지 않습니다. 반면 Role은 여러 Authorities를 포함할 수 있는 포괄적인 permission을 가지며, 반드시 prefix에 'ROLE_'을 명시해야하는 작명규칙을 가집니다. 그림으로 살펴보면 아래와 같이 표현할 수 있습니다. 참고 자료 : https://www.youtube.com/playlist?list=PLV..