본문 바로가기

부트캠프 개발일기/Spring Security8

68일차: OAuth2 구현(Google) Google을 기준으로 OAuth2 인증 시스템을 적용해보고자 한다. https://console.cloud.google.com/ 에서 클라이언트 ID와 Secret를 생성한다. 클라이언트 ID와 Secret는 애플리케이션 설정정보로 사용된다. OAuth2을 적용하기 위해서는 OAuth2 의존성을 추가해주어야한다. implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' CSR 방식의 애플리케이션에 OAuth2를 적용되었을때의 흐름은 다음과 같다. Resource Owner가 웹 브라우저에서 Google로그인을 클릭한다. Frontend에서 Backend로 로그인 request를 전달한다. Google 로그인 화면을 요청하는 .. 2023. 5. 19.
67일차: OAuth2 인증 ❯ OAuth 2 사용자가 특정 서비스를 이용하기 위해서 신뢰할만한 벤더에게 인증 처리를 위임하는 것을 말한다. 주변에서 쉽게 찾아볼 수 있으며, 구글 로그인 / 네이버 로그인 등이 여기에 해당한다. OAuth2 에서 Componet의 종류와 역할 Resource Owner: 사용하고자하는 리소스의 실제 소유자를 의미한다. 예를들어 A라는 애플리케이션에 B라는 사람이 구글로그인을 통해 서비스를 이용하고자한다면, B가 구글로그인 서비스의 Resource Owner가 된다. Client: Resource Owner를 대신해 Resource에 액세스하는 애플리케이션을 의미한다. 위의 경우에서 A에 해당한다. Authorization Server: Client가 Resource Server에 접근할 수 있는 권.. 2023. 5. 18.
66일차: Spring Security에 JWT 적용 1. 의존 라이브러리 추가 JWT 를 적용하기 위해서는 build.gradle 설정파일에 Spring Security Srarter와 jjwt 라이브러리를 추가해주어야한다. dependencies { ... // Spring Security Starter 추가 implementation 'org.springframework.boot:spring-boot-starter-security' // JWT 기능을 위한 jjwt 라이브러리 implementation 'io.jsonwebtoken:jjwt-api:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' runtimeOnly'io.jsonwebtoken:jjwt-jackson:0.11.5' } 2. Spring.. 2023. 5. 17.
65일차: 자격 증명 / JWT 인증 ❯ 자격 증명 HTTP 프로토콜은 요청 - 응답이 종료되면 상태를 저장하지 않고 연결이 끊어지게 된다. (무상태성, 비연결성) 로그인 상태가 유지되지 않는다면 해당 계정으로 추가적인 요청을 할 때마다 로그인 정보를 다시 전송해야 할 것이다. 이런 부분을 개선하기 위해 '자격 증명'을 통해 인증된 사용자 정보를 저장해야 한다. 자격 증명 방식은 크게 두 가지로 나누어 설명할 수 있다. 세션 기반 자격 증명 방식: 인증된 사용자 정보를 세션 형태로 세션 저장소에 저장하는 방식. 인증 정보를 서버 쪽 세션 저장소에서 관리한다. SSR 방식에 적합한 형태이다. 토큰 기반 자격 증명 방식: 자격 증명 정보(Credential)를 통해 토큰(Token)을 부여받는 방식. 한번 사용자 자격을 인증받은 후에는 인증된 .. 2023. 5. 16.
64일차: 인증(Authentication), 인가(Authorization) ❯ Spring Security의 인증 처리 흐름 인증이란 적절한 사용자인지 확인하는것을 의미한다. 일반적으로 아이디, 패스워드를 통한 로그인 방식을 주로 사용하므로 해당 방식에 대한 인증 처리 흐름에 대해 그림으로 정리해보았다. 위 그림에서 비어있는 삼각형으로 구성된 화살표는 인터페이스와 그 구현클래스를 나타내며 흰색 박스는 DI 되어있는 객체를 의미한다. ❯ Spring Security의 인가 권한 부여 처리 흐름 인가는 적절한 권한을 가지고있는지 확인하는 것을 의미한다. 사용자의 권한과 관련된 필터는 AuthorizationFilter이다. 2023. 5. 15.
63일차: Spring Security (2) 웹요청 처리흐름, Filter Chain ❯ 보안이 적용된 웹 요청의 일반적인 흐름 사용자가 리소스를 요청하면 적절한 사용자인지 확인(인증)하고, 인증된 사용자에 대해서 접근 권한이 있는지 검증(인가)한다. 사용자의 요청이 엔드포인트(Controller 등)를 거쳐서 리소스에 도달하기 전에 위 그림과 같이 인증관리자 혹은 접근 결정 관리자같은 컴포넌트가 웹 요청을 가로채서 인증/인가를 수행하게 된다. 이처럼 서블릿 기반 애플리케이션에서 애플리케이션 엔드포인트에 요청이 도달하기 전에 요청을 가로채서 처리를 할 수 있도록 하는 것이 서블릿 필터(Servlet Filter)이다. 서블릿 필터는 인터페이스 형태로 정의되어 있으며 doFilter() 메서드 호출을 통해 필터 체인을 형성한다. 서블릿 필터는 하나 이상의 필터를 연결해서 필터 체인(Filt.. 2023. 5. 15.