SpringSecurity
8 posts
Spring
SpringSecurity
June 26, 2024
AuthenticationProvider and Housekeeping

AuthenticationProvider and Housekeeping AuthenticationProvider 고객의 요구사항은 다양할 수 있다. 예를 들어, 어떤 고객은 애플리케이션에서 인증을 수행하는데 유저이름과 비밀번호를 사용하고 싶을 수 있고, 어떤 고객은 OAuth2를 사용하고 싶을 수도 있다. 또 어떤 고객은 몇몇 서비스에 OTP를 적용하는 것을 고려할지도 모른다. 이렇게 수 많은 경우의 요구사항을 프레임워크에서 모두 준비해 줄 수 없기 때문에, 우리는 우리만의 를 커스텀하여 사용해야 한다. AuthenticationProvider 내에는 두 가지 추상 메서드가 있다. 첫 번째는 메서드이다. 반환하는 객체는 인증이 성공적이었는지에 대한 정보를 가지고 있어야 가 다른 를 시도해 볼 수 있다. 두 번째는 메서드이다. 해당 메서드는 우리가 커스텀하는 가 어떤 종류의 인증을 지원하고 싶은지를 서술한다. 어떤 종류의 인증에 관해 이 가 부름을 받아야 하는지 프레임워크에 알려주…

Spring
SpringSecurity
June 26, 2024
Spring Security PasswordEncoder

Spring Security PasswordEncoder Encoding, Encryption and Hashing 고객의 데이터를 저장할 때, 비밀번호와 같은 민감한 값은 Plaintext 형태로 직접 저장해서는 안된다. 데이터 보안의 핵심은 이러한 민감한 정보를 안전하게 보호하는 것이다. 이를 위해 흔히 사용하는 세 가지 방법은 Encoding, Encryption, 그리고 Hashing이다. 각 방법의 특징과 차이점을 이해하는 것은 매우 중요하다. Encoding 목적: 데이터를 다른 형식으로 변환하여 전송하거나 저장하는 과정. 특징: 데이터의 변환은 가독성을 높이기 위한 것이며, 정보 자체의 보안을 고려하지 않는다. 가역성: 가역적이다. 즉, 원래 데이터로 복원할 수 있다. 예: Base64, URL Encoding 등. Encryption 목적: 데이터를 암호화하여 권한이 없는 사람이 읽을 수 없도록 보호. 특징: 암호화 키를 사용하여 데이터를 변환하며, 해당 키를 사용…

Spring
SpringSecurity
June 25, 2024
Spring Security 유저 관리 인터페이스

Spring Security 유저 관리 인터페이스 기본 설정에서의 스프링 시큐리티 시퀀스 기본 설정에서 의 구현체인 를 사용하고, 의 구현체인 를 사용했다. 는 의 확장인 의 구현체인 를 사용했다. 위 내용은 아주 중요하니 숙지하고 들어가야 한다. UserDetails 이전 섹션에서 설명한 /는 유저 정보를 표현하기 위해 인터페이스를 사용한다. 한 번 인터페이스를 살펴보자 : 이 메서드는 엔드 유저의 권한 또는 역할 목록을 보유하고 있고 그래서 이를 이용하여 인가 또는 역할 기반 엑세스 메커니즘을 구현할 수 있다. : 엔드 유저의 비밀번호를 반환한다. : 엔드 유저의 유저 이름을 반환한다. 기본 세부 정보 이후에 유저 계정이 만료되었는지, 잠겨 있는지, 자격 증명이 만료되었는지 등을 확인하는데 도움이 되는 몇가지 다른 메서드들도 제공한다. User 스프링 시큐리티 팀은 를 구현한 를 샘플로 제공한다. 우리는 이 구현체가 마음에 들지 않으면 커스텀한 새로운 구현체를 만들어…

Spring
SpringSecurity
June 24, 2024
Spring Security 기본 설정, 커스텀

Spring Security 기본 설정, 커스텀 기본 필터체인 을 확인하면 다음과 같이 기본 필터체인이 등록되었음을 확인할 수 있다. : 이 구문은 해당 필터체인의 인가 규칙을 정의한다. : 모든 요청에 대해 인증이 필요하다고 설정한다. ⚠️ 최신 스프링 시큐리티에서는 TypeCasting 없이 사용할 수 있도록 개선됐다. -> : 폼 기반 로그인을 설정한다. 프론트엔드와 백엔드가 나뉘어 http로 유저네임과 비밀번호를 전송하는 경우에는 사용하지 않는다. : http 기본 인증을 설정한다. 이 설정은 http 헤더를 통해 인증을 수행할 수 있도록 한다. -> 이는 JWT의 그것과 다르다. 자세한 내용은 아래 참조. HTTP Basic 인증 과정 클라이언트 요청: 클라이언트는 보호된 리소스에 접근하기 위해 서버에 HTTP 요청을 보냅니다. 이때 클라이언트는 아직 인증되지 않은 상태입니다. 서버의 인증 요구: 서버는 클라이언트가 인증되지 않았음을 인지하고, 401 Unauth…

Spring
SpringSecurity
June 24, 2024
Spring Security 디버깅

Spring Security 디버깅 Spring Security Filters 스프링 프레임워크는 Tomcat 서블릿 컨테이너 위에서 돌아가므로 Tomcat의 서블릿 필터 기능에 의존한다. 스프링 시큐리티를 사용하게 되면 이 Tomcat의 FilterChain에 스프링 시큐리티 전용 필터를 하나 끼워넣어 모든 요청을 가로채는데, 이것이 바로 이다. 는 기타 로직이 하나도 없이 단지 스프링 프레임워크 내부의 빈으로 요청을 넘겨주는 프록시 역할만을 할 뿐이다. 는 엔드 유저의 요청에 따라 스프링 시큐리티가 관리하는 을 호출하여 요청을 거기로 프록시한다. 는 인증 및 인가와 관련된 여러 사항을 검증하고 적절한 응답을 반환하는 것을 목표로 한다. 는 위 그림과 같이 여러개로 구성될 수 있으며, 엔드 유저의 요청 URL에 따라 가 적절한 에게 프록시 해준다. Default Spring Security Filter Chain 를 열어보면 다음과 같은 메서드를 확인할 수 있다. 이 메…

Spring
SpringSecurity
June 23, 2024
Spring Security 내부 흐름

Spring Security 내부 흐름 플로우 다이어그램 사용자가 웹 어플리케이션에 자격증명 정보를 입력한다. 이 정보는 으로 넘겨진다. 는 사용자가 입력한 자격증명을 가로채고, 접근 권한이 있는지 확인한다. FIlter Chain에는 : 사용자 이름과 비밀번호를 통한 인증을 처리 : HTTP Basic 인증을 처리 : CSRF 공격을 방지 : 로그아웃 요청을 처리 와 같은 필터들이 있을 수 있다. 는 엔드유저가 보낸 자격증명 정보에서 유저네임과 비밀번호를 추출하여 객체로 변환한다. 에 이미 정보가 존재하는 경우는 이후 해당 객체를 사용하고, 과정을 스킵한다. 객체는 스프링 시큐리티 프레임워크 안에서 엔드유저의 정보를 저장하기 위한 핵심 표준이다. 2단계에서는 유저네임와 자격증명만을 보유한다. 바로 다음과 같은 것들이다. : 사용자 이름 또는 사용자 식별자 : 사용자가 입력한 비밀번호 이후의 인증 과정에서 이 객체에는 더 많은 책임과 역할이 부여될 수 있다. 는 생성된…

Backend
Spring
SpringSecurity
April 04, 2024
SecurityBuilder와 SecurityConfigurer

SecurityBuilder와 SecurityConfigurer 본 포스팅 시리즈에서 Spring Security는 Spring Boot 2.7.x 버전을 기준으로한 강의를 최신 스프링 공식 문서를 참고하여 수정하였습니다. Deprecated된 여러 메서드들을 최대한 최신에 맞게 바꾸었지만 완벽하지 않을 수 있습니다. 포인터를 잘 알아야 하는 이유 개념 및 구조 이해 는 빌더 클래스로서 웹 보안을 구성하는 빈 객체와 설정 클래스들을 생성하는 역할을 하며 , 가 있다. 는 Http요청과 관련된 보안처리를 담당하는 필터들을 생성하고 여러 초기화 설정에 관여한다. 는 를 포함하고 있으며 인증 및 인가 초기화 작업은 에 의해 진행된다. 시퀀스 다이어그램 에서 를 호출하면, 의 과 가 호출되어 초기화 작업이 진행된다. 의 가 반환하는 최종 클래스는 내부의 가 반환한 이다. 의 가 반환하는 최종 클래스는 내부의 가 반환한 이다. 는 내부에 을 가지고 있다. 내부의 여러가지 필터들을…

Backend
Spring
SpringSecurity
JWT
April 03, 2024
Spring Security 6.2.1 JWT 설정하기

Spring Security 6.2.1 JWT 설정하기 Security Config 클래스 기본 요소 작성 스프링 시큐리티의 인가 및 설정을 담당하는 클래스이다. Security Config 구현은 스프링 시큐리티의 세부 버전별로 많이 상이하다 (이번 시리즈는 스프링 시큐리티 6.2.1 버전) BCryptPasswordEncoder 등록 커스텀 로직 구현 Form 로그인 방식에서는 클라이언트단이 username과 password를 전송한 뒤 Security 필터를 통과하는데 필터에서 회원 검증을 진행을 시작한다. (회원 검증의 경우 가 호출한 를 통해 진행하며 DB에서 조회한 데이터를 를 통해 받음) 우리의 JWT 프로젝트는 에서 formLogin 방식을 disable 했기 때문에 기본적으로 활성화 되어 있는 해당 필터는 동작하지 않는다. 따라서 로그인을 진행하기 위해서 필터를 커스텀하여 등록해야 한다. 🚀 구현 목표 아이디, 비밀번호 검증을 위한 커스텀 필터() 작성 DB에 …