Spring Boot/Security
![[Spring Security] OAuth2 인증(Authentication) 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1qbl4%2FbtrNlSm6vEF%2FOFSrlwoskdGDoTlEv6jJfk%2Fimg.png)
[Spring Security] OAuth2 인증(Authentication) 구현
OAuth2 로그인 인증을 처리하기 위한 OAuth2 인증 프로토콜을 제공하는 Google의 서비스를 이용하여 구현해본다. 구글 OAuth2 인증 사전 작업 1. 구글 API 및 서비스 콘솔로 접속한다. https://console.cloud.google.com/apis 2. 새 프로젝트를 생성한다. 3. OAuth 동의 화면 탭에서 User Type을 외부로 지정하고 만들기를 클릭한다. 4. 앱 이름, 사용자 지원 이메일, 이메일 주소 칸을 입력한 후 저장 후 계속을 클릭한다. 5. 사용자 인증 정보 탭에서 사용자 인증 정보 만들기 - OAuth 클라이언트 ID를 클릭한다. 6. 애플리케이션 유형 - 웹 애플리케이션 선택, 이름, 승인된 리디렉션 URI (http://localhost:8080/logi..
![[Spring Security] OAuth2란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwqAMn%2FbtrNlQo8tLt%2Ff2LUOQnyuTMWCdpfv1ZpN1%2Fimg.png)
[Spring Security] OAuth2란?
OAuth2란? 서비스를 제공하는 애플리케이션에서 해당 서비스를 이용하는 사용자의 크리덴셜(Credential)을 직접적으로 관리하는 것이 전통적인 방법이다. 만약 서버가 사용자의 크리덴셜을 관리하는 환경에서 Google Calender API를 이용한다고 가정한다면, 해당 서비스는 회원 가입을 통해 사용자의 크리덴셜을 관리해야 함은 물론이고 Google Calender API를 이용하기 위해 Google에서 사용하는 사용자의 크리덴셜까지 관리해야 한다. 이런 상황에서의 문제점은 사용자에게 중요한 정보인 크리덴셜이 두 개로 생성되어 관리됨으로써 보안상의 문제와, Google에서 패스워드를 변경한다고 가정한다면 해당 서비스 애플리케이션에서도 업데이트해주어야 한다는 것이다. 이런 문제점을 보완하는 효과적인 ..
[Spring Security] JWT 로그인 인증, 자격 증명 구현
SecurityContfiguration 클래스 JWT를 적용하기 전에 Spring Security를 이용한 보안 강화를 위해 최소한의 보안 구성 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.pa..
![[Spring Security] JWT 인증(JSON Web Token Authentication)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsCxZB%2FbtrMXIsQxiD%2FQHxotox8iwKSGiyuMDeEyK%2Fimg.png)
[Spring Security] JWT 인증(JSON Web Token Authentication)
세션 기반 자격 증명 방식 HTTP 프로토콜은 request를 전송한 후, response를 수신하게 되면 연결을 끊는 비연결성(Connectionless)의 특성과 request와 response에 대한 상태를 저장하지 않는 비상태성(Stateless)의 특성을 가지고 있다. 때문에 로그인 인증이 성공적으로 수행되었다 하더라도 서버 측에서는 매 번 request를 수신할 때 마다 이 request가 인증된 사용자가 보낸 request인지 알 수 있는 방법이 없다. 이러한 HTTP 특성으로 인해 사용자 인증이 성공적으로 이루어졌을 때, 인증된 사용자 request의 상태를 유지하기 위한 대표적인 수단이 세션이다. 세션 기반 자격 증명 방식의 특징 세션은 인증된 사용자 정보를 서버 측 세션 저장소에서 관리..
![[Spring Security] 권한 부여(Authorization) 구성 요소](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfGBLD%2FbtrMS3aOKBT%2FM347GFbwAaBPj3gsXeee60%2Fimg.png)
[Spring Security] 권한 부여(Authorization) 구성 요소
Spring Security의 권한 부여(Authorization) 컴포넌트 권한 부여는 인증에 성공한 사용자라 할지라도 부여된 권한 범위 내에서 애플리케이션의 리소스에 접근할 수 있어야함을 의미한다. Spring Security에서 사용자 인증 시 부여 받은 권한을 기준으로 애플리케이션 리소스에 대한 접근을 어떻게 허가 또는 제한하는지 그 과정을 살펴보도록 한다. Spring Security 에서 URL을 통해 사용자의 액세스를 제한하는 권한 부여 Filter는 AuthorizationFilter이다. (1) AuthorizationFilter는 SecurityContextHolder로 부터 Authentication을 획득한다. (2) AuthorizationFilter는 획득한 Authenticat..
![[Spring Security] 인증(Authentication) 구성 요소](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTsdUN%2FbtrMJthxbf9%2FuQCardItzKOSd5dr26HWf0%2Fimg.png)
[Spring Security] 인증(Authentication) 구성 요소
Spring Security의 인증(Authentication) 컴포넌트 안전하게 잘 보호된 애플리케이션을 개발하기 위해서 반드시 익혀야 되는 중요한 보안 요소가 두 가지 중 하나인 인증(Authentication)에 대해 알아보자. (1) 사용자가 로그인 폼을 이용해 Username과 Password를 포함한 request를 Spring Security가 적용된 애플리케이션에 전송하면, UsernamePasswordAuthenticationFilter가 해당 요청을 전달 받는다. (2) 사용자 로그인 request를 받은 UsernamePasswordAuthenticationFilter는 UsernamePasswordAuthenticationToken을 생성한다. (UsernamePasswordAuth..