분류 전체보기

Spring/Security

[Spring Security] 예제 프로젝트3. 세션 기반 인증과 토큰 기반 인증

[Spring Security] 예제 프로젝트2. API 기반 커스텀 인증 구현 2023.09.16 - [Spring/Security] - [Spring Security] 예제 프로젝트1. 목표 및 기본 구현 [Spring Security] 예제 프로젝트1. 목표 및 기본 구현 지금까지 정수원님의 Spring Security 강의를 보며 Spring Security 포스팅을 cares-log.tistory.com 현재 포스팅은 위 포스팅에서 이어집니다. 목표 토큰 기반 인증을 구현하기 위해 세션 기반 인증과 토큰 기반 인증이 어떤 차이점이 있는지를 분석한 후, 이 차이점을 바탕으로 어떤 정책을 가지고 토큰 기반 인증을 구현할 것인지 정리해볼 것이다. 세션 기반 인증 세션 기반 인증은 위 그림처럼 사용자의..

Spring/Security

[Spring Security] 예제 프로젝트2. API 기반 커스텀 인증 구현

[Spring Security] 예제 프로젝트1. 목표 및 기본 구현 지금까지 정수원님의 Spring Security 강의를 보며 Spring Security 포스팅을 작성해 왔다. 하지만 해당 강의는 5.x 버전 대의 내용을 다루고 있었고, Spring Boot 3(Framework 6.x)가 출시되면서 Spring Security 역시 cares-log.tistory.com 현재 포스팅은 위 포스팅에서 이어집니다. 목표 이번 포스팅에서는 API로 로그인을 할 수 있도록 인증 필터를 구현할 것이다. Spring Security에서 구현해 놓은 기존의 Form Login 인증 프로세스를 분석한 후, 기존의 클래스들을 사용할 수 있다면 적절히 사용하고 정말 필요한 부분만 커스터마이징 할 것이다. 이전에 ..

Spring/Security

[Spring Security] 예제 프로젝트1. 목표 및 기본 구현

지금까지 정수원님의 Spring Security 강의를 보며 Spring Security 포스팅을 작성해 왔다. 하지만 해당 강의는 5.x 버전 대의 내용을 다루고 있었고, Spring Boot 3(Framework 6.x)가 출시되면서 Spring Security 역시 6.x 버전이 출시가 되었고, 5.x 버전과는 변경점이 많아졌다고 생각한다. 따라서 6.x 버전을 기준으로 실전에서 요구될법 한 사항들을 구현해볼 것이다. 목표 1. API를 통해 이메일과 비밀번호로 인증 2. 토큰으로 클라이언트 인가 3. 리소스별 동적으로 권한 설정 4. 메서드별 권한 설정 간단하게 회원 가입 API를 만들고, API 기반으로 이메일과 비밀번호를 통해 로그인하도록 구현해볼 것이다. 이후 세션 기반으로 회원의 인증 정보..

Spring/Security

[Spring Security] 번외. WebSecurityConfigurerAdapter Deprecation

지금까지 Spring Security가 제공하는 기능들을 커스텀하게 설정하기 위해서 `WebSecurityConfigurerAdapter`를 구현하는 방식을 사용했었다. 하지만 이 방식은 Spring Security 5.7.0 버전 부터 컴포넌트 기반의 설정을 장려하기 위해 Deprecated 되었다. 따라서 Spring Security 블로그에서 `WebSecurityConfigurerAdapter`를 구현하는 방식을 대체할 수 있는 방법을 잘 작성해 놓았다. (스프링 블로그 참고) 기존 방식은 구현 클래스에서 각 메서드를 구현하는 방법으로 설정을 구성했기 때문에 하나의 컴포넌트에서 모든 설정을 다루는 방식이었지만, 이제는 스프링 빈으로 등록하는 방식으로 변경되었기 때문에, 여러 컴포넌트로 설정을 분산..

Spring/Security

[Spring Security] 14. 아키텍쳐 - 인가 흐름

인가란 사용자가 특정 리소스나 기능에 접근할 수 있는 권한을 부여하는 프로세스를 말한다. 이전에 Spring Security에서는 인증 작업시 유저에게 권한을 부여하는 과정이 있었고, 추후 해당 유저가 리소스에 접근할 때 해당 리소스에 접근 가능한 권한인지 확인하는 것을 보았었다. 이번에는 이 과정에 대해서 자세하게 살펴보고자 한다. 우선 Spring Security에서 제공하는 권한 검증 방법은 3가지가 있다. 1. 웹 계층 검증: URL 요청에 따른 화면 단위의 레벨 보안 2. 서비스 계층 검증: 메서드 같은 기능 단위의 레벨 보안 3. 도메인 계층 검증: 객체 단위의 레벨 보안 지금까지 인가 설정을 하면서 다뤘던 것은 웹 계층 검증에 대해서였다. 나머지 기능들은 추후에 알아보도록 하고, 이번에도 웹..

Spring/Security

[Spring Security] 13. 아키텍처 - 인증 흐름

지금까지 인증과 관련해서 커스텀 설정을 하는 방법을 시작해서 세부적으로 Spring Security에서 어떻게 인증 정보를 다루는지(`Authentication` 인터페이스), 이 인증 정보는 어디에 저장(`SecurityContext`)하는지, 인증 객체 저장소는 어떻게 초기화 되는지 등의 기본 아키텍처들을 모두 배웠다. 여기서는 Spring Security에서 어떻게 인증을 수행해서 `Authentication` 객체를 만들어 내는지에 대해 구조와 함께 알아보고, 전체적으로 인증 과정들을 정리해보고자 한다. 인증 관리 - AuthenticationManager `UsernamePasswordAuthenticationFilter` 클래스의 `attemptAuthentication()` 메서드 부터 살펴..

Spring/Security

[Spring Security] 12. 아키텍처 - 인증 객체와 인증 객체 저장소

인증 객체 - Authentication 이전에 기본 인증 API에 대해 다뤘을 때 `Authentication`의 구현체가 자주 등장했었다. 이제 이 인터페이스를 상세하게 살펴보자. `Authentication`은 이름 그대로 Spring Security 전역에서 사용자의 인증 정보를 다룰 때 사용하기 위한 역할들을 추상화 해놓았다. 인증 시 `Authentication`을 구현한 객체를 `SecurityContext`에 저장하고, 인증 정보가 필요할 경우 `SecurityContext`에서 `Authentication` 객체를 꺼내어 각종 정보를 토대로 보안 로직을 수행하게 된다. 6개의 추상 메서드가 정의되어 있는데 한번 살펴보자. package org.springframework.security...

Spring/Security

[Spring Security] 11. 아키텍처 - 보안 필터 적용 과정

이전까지 어떻게 Filter의 기능을 Spring으로 위임 시키는지 위임 필터 초기화 과정과 위임 과정에 대해서 살펴보았다. 이번에는 Spring Security 필터들이 어떻게 요청에 적용되는지 과정을 살펴보자. 필터 적용 과정 이전 포스팅에서 위임 과정에 대해서 살펴 봤을 때 결국 위임된 `FilterChainProxy`의 `doFilter()`로 부터 필터 적용이 시작되는 것을 확인했다. 요청이 들어올 경우 `FilterChainProxy`의 `doFilter()`가 호출되고, 이 안에서 `doFilterInternal()`이 호출되며 필터들이 적용되는 것이다. 한번 메서드를 다시 한 번 살펴보자. package org.springframework.security.web; public class F..

Spring/Security

[Spring Security] 10. 아키텍처 - 위임 필터와 필터 초기화

위임 필터 Filter는 Servlet 2.3 부터 도입된 스펙이다. 요청이 Servlet 자원에 접근하기 전, 후에 필터를 거쳐 특정 로직을 수행할 수 있게 해준다. HTTP 요청이 들어오면 아래와 같은 순서로 진행된다. HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 Filter는 Servlet Container에서 생성 및 실행되기 때문에 Spring Bean이 제공하는 기능들을 사용할 수가 없다. 따라서 Servlet Container의 필터가 Spring Container에서 작동할 수 있도록 하기 위해 요청을 위임하는 방식을 사용한다. 간략하게 정리하자면 `DelegatingFilterProxy` 클래스가 위임하는 역할을 수행하고, `FilterChainProxy`가 위임받아 ..

Spring/Security

[Spring Security] 9. CSRF 필터

CSRF Cross Site Request Forgery의 약자로, 사이트 간 요청 위조를 의미한다. 클라이언트의 요청을 위조하여 공격자가 의도한 행위를 수행하게 하여 공격하는 기법이다. 공격의 과정은 다음과 같다. 1. 사용자가 서버로 로그인을 수행한다. 2. 사용자의 쿠키에는 서버에 인증 정보가 저장된 세션 ID가 저장된다. 3. 공격자는 악성 스크립트 등이 담겨있는 페이지를 유도한다. - 일반적으로 클릭하면 서버의 API를 호출하도록 하는 스크립트 4. 사용자는 악성 스크립트를 통해 공격자가 설정해 놓은 API를 요청하게 된다. - 사용자는 인증을 마쳤기 때문에, 인증에 성공된 세션 ID를 쿠키에 담고 있다. 5. 서버는 인증된 세션 ID를 통해 클라이언트의 요청을 정상 처리하게 된다. 6. 사용자..

괴발자
'분류 전체보기' 카테고리의 글 목록 (4 Page)