Spring/Spring Security 8

[Spring Security] 전역 메서드 보안

전역 메서드 보안 (Global Method Security)클래스나 메서드 단위에서 특정 권한을 가진 사용자만 메서드를 실행하도록 제한할 수 있는 기능전역 메서드 보안에서 수행할 수 있는 두 가지 주요 작업은 다음과 같음호출 권한 부여필터링 기본적으로 스프링 시큐리티에서는 전역 메서드 보안이 비활성화 상태로 제공되기 때문에 해당 기능을 사용하기 위해서는 전역 메서드 보안을 우선 활성화해줘야 함Spring Security 6 버전에서는 @EnableMethodSecurity 하위 버전에서는 @EnableGlobalMethodSecurity 어노테이션 부여전역 메서드 보안을 활성화시키면 스프링의 Aspect(보안 Aspect)가 하나 활성화 됨해당 Aspect는 호출을 가로채어 권한 부여 규칙이 충족되지 ..

[Spring Security] CSRF & CORS

CSRF (Cross-Site Request Forgery)웹 애플리케이션의 취약점을 악용해 사용자의 권한을 도용하여 악의적인 요청을 보내는 공격을 방지하기 위한 보안 기능Spring Security는 CSRF 공격을 방지하는 기본적인 메커니즘을 제공하며 CSRF 보호는 Spring Security를 사용하는 대부분의 애플리케이션에서 기본적으로 활성화되어 있음  CSRF 공격사용자가 자신도 모르게 공격자의 의도된 작업을 수행하게 만드는 공격 기법사용자의 의지와는 무관하게 공격자가 의도한 행동을 수행해서 웹 페이지의 보안을 취약하게 하거나 수정/삭제 등의 작업을 하는 공격 방법ex) Man in the Middle 공격을 통해 인증된 세션을 탈취하고 해당 세션을 기반으로 서버에 악성 요청을 보냄 Sprin..

[Spring Security] 필터 체인과 커스텀 필터

HTTP 필터애플리케이션의 HTTP 요청이 처리되기 전에 다양한 보안 검사를 수행하여 인증 및 인가 등의 작업을 처리Spring Security는 다양한 필터들을 체인 형태로 연결하여 요청이 처리될 때 순차적으로 실행되도록 구성하며 각 필터는 특정 보안 작업을 수행하며, 그 결과를 다음 필터에 전달함전체 필터 체인은 SecurityFilterChain 인터페이스에 의해 관리됨기본 설정으로 되어 있는 필터와 커스텀하게 설정된 필터를 함께 사용하여 HTTP 요청을 필터링실무의 다양한 비즈니스 요구사항을 구현하기에는 기본 필터 구성만으로는 부족하기 때문에 커스텀하게 필터를 정의하는 케이스가 많음 필터 체인은 필터가 작동하는 순서가 정의된 필터의 모음을 나타내며 필터 구현체에는 각자의 순서가 존재함각 필터는 순..

[Spring Security] 액세스 제한과 권한

1. 스프링 시큐리티 인증, 인가 흐름인증(Authentication)은 사용자가 누구인지 확인하는 과정인가(Authorization)는 그 사용자가 어떤 리소스에 접근할 수 있는지 결정하는 과정 1.1 인증 흐름클라이언트가 ID와 비밀번호와 같은 자격 증명을 입력하여 로그인 요청을 보내고 이는 Authentication 객체로 변환됨AuthenticationManager가 인증 요청을 처리하는데 AuthenticationManager는 여러 개의 AuthenticationProvider에게 인증 처리를 위임각각의 AuthenticaitonProvider는 DB 기반 인증, LDAP 기반 인증 등과 같은 특정 인증 방식에 대해 인증 시도기본적으로 DaoAuthenticaitonProvider가 많이 사..

[Spring Security] 아키텍처 간단 정리

Spring Security 아키텍처  1. AuthenticationFilterSpring MVC 기준으로 요청이 DispatcherServlet에 도달하기 전에 인증 필터가 요청을 가로챔모든 들어오는 요청은 이러한 필터들을 통과하며, 여기서 인증 및 인가가 이루어짐요청의 유형에 따라 BasicAuthenticationFilter, UsernamePasswordAuthenticationFilter 등 다양한 인증 필터 존재 요청이 적절한 AuthenticationFilter에 의해 가로채지면, 필터는 요청에서 username과 password를 추출하여 Authentication 객체 생성추출된 자격 증명이 username과 password일 경우, 위 사진처럼 UsernamePasswordAuthe..

[Spring Security] OAuth 2.0 개요

개요이번 게시글에서는 OAuth 2.0에 대해 간략히 알아보겠습니다.OAuth 2.0을 이해하기 위해서는 아래의 개념을 알아야 하며 각각의 개념을 간략히 정리하겠습니다.인증과 인가의 차이OAuth 2.0 개념OAuth 2.0 구성 요소OAuth 2.0 Client OAuth 2.0 토큰OAuth 2.0 권한부여 유형 1. 인증 vs 인가OAuth 2.0 설명에 앞서 인증(Authentication)과 인가(Authroization)를 확실히 구분한 상태로 읽으시면 좋을 것 같습니다. 인증 (Authentication)클라이언트가 요청하는 주체가 자기 자신임을 입증하는 절차ex) 로그인 인가 (Authorization)인증받은 사용자가 어떤 권한을 갖고 있는지 체크하는 절차Role에 따라 부여받은 권한이 ..

[Spring Security] Remember-me를 통해 로그인 유지하기

개요Spring Security를 통해 로그인한 뒤 브라우저 쿠키를 확인해보면 JSESSIONID가 있는 것을 확인할 수 있습니다.JSessionID는 Tomcat 컨테이너에서 세션을 유지하기 위해 발급한 키이며 HTTP 프로토콜은 기본적으로 stateless이기 때문에 상태를 저장하기 위해 Tomcat이 JSESSIONID 쿠키를 클라이언트에 발급한 것이며 해당 쿠키를 통해 세션을 유지합니다.세션이 만료될 경우 쿠키 내 JSESSIONID가 사라지면서 로그인이 풀리게 되는데 세션이 만료되더라도 로그인을 유지하고 싶다면 Spring Security에서 제공해주는 Remember-me 쿠키를 사용해야 합니다.이번 게시글에서는 Remember-me에 대해 간단하게 알아보겠습니다. * 쿠키, 세션에 대한 개념..

[Spring Security] @AuthenticationPrincipal

개요로그인한 사용자의 정보를 매개변수로 전달받을 방법을 고민하던 중 편리하게 사용할 수 있는 어노테이션이 있어 간단히 정리하고자 합니다.이 내용은 대부분 엔꾸꾸님이 정리하신 내용과 동일하므로 엔꾸꾸님 블로그를 참고하시는 것을 추천합니다. 1. @AuthenticationPrincipal 어노테이션 없이 로그인한 사용자의 정보를 불러오는 방법해당 어노테이션을 사용하기 전에는 Principal 객체를 통해 로그인한 사용자를 받아올 수 있지만 이는 SecurityContextHolder 내 Principal(SecurityContextHolder.getContext().getAuthentication().getPrincipal())과는 달리 Java 표준 Principal 객체이므로 name 정보밖에 불러오지..