1.스프링 시큐리티란?
Spring 기반의 어플리케이션의 보안(인증, 인가, 권한 부여, 보호 기능 등)을 담당하는 스프링 하위 프레임워크입니다.
Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에, 개발자 입장에서 일일이 보안 관련 로직을 작성하지 않아도 된다는 장점이 있습니다.
- 인증(Authentication) : 해당 사용자가 본인이 맞는지 확인하는 과정
- 인가(Authorization) : 해당 사용자가 요청하는 자원을 실행할 수 있는 권한이 있는가를 확인하는 과정
2.의존성 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
3.자동 설정에 의한 기본 보안 작동
- 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다.
(별도의 설정이나 코드를 작성하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다.)
※ 스프링 시큐리티 gradle 의존성을 추가한 이후 기본 유저 정보 자동 생성된다.
4.인증 / 인가 작업을 처리하는 클래스 : SecurityBuilder / SecurityConfigurer

출처 - 인프런, 스프링 시큐리티 완전 정복 강의(정수원님)
5. SecurityBuilder / SecurityConfigurer 기본 동작 구조

출처 - 인프런, 스프링 시큐리티 완전 정복 강의(정수원님)
6. SecurityBuilder / SecurityConfigurer 예시

출처 - 인프런, 스프링 시큐리티 완전 정복 강의(정수원님)
7.스프링 필터란?
클라이언트 요청이 서버로 전달되기 전이나 응답이 클라이언트로 전달되기 전에 중간에서 요청과 응답을 가로채고 처리하는 기능입니다.

출처 - https://sallykim5087.tistory.com/158
8.Spring Security Architecture

1. Http Request 수신
-> 사용자가 로그인 정보와 함께 인증 요청을 한다.
2. 유저 자격을 기반으로 인증토큰 생성
-> AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 수신된 요청에서 사용자 이름과 비밀번호를 추출한다.
이 추출된 사용자 자격 증명(credentials)을 기반으로 인증용 객체를 만들게 되는데, 이를 UsernamePasswordAuthenticationToken이라고 한다.
※ UsernamePasswordAuthenticationToken : 유저정보 == DB에 담긴 유저정보 가 같은지를 판별하는 역할
※ JWT Token : 사용자가 로그인하면 서버에서 해당 클라이언트에게 유일한 토큰을 발급하여, 사용자 요청 시 HTTP 헤더에 토큰을 심어서 서버로 보내면, 서버는 토큰을 검증하여 클라이언트를 인증하는데 사용
3. FIlter를 통해 AuthenticationToken을 AuthenticationManager로 위임
-> AuthenticationManager의 구현체인 AuthenticationProvider에게 생성한 UsernamePasswordToken 객체를 전달한다.
4. AuthenticationProvider의 목록으로 인증을 시도
-> AutenticationManger는 등록된 AuthenticationProvider들을 조회하며 인증을 요구한다.
5~9. UserDetailsService의 요구
-> 실제 데이터베이스에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보를 넘겨준다.
6. UserDetails를 이용해 User객체에 대한 정보 탐색
-> 넘겨받은 사용자 정보를 통해 데이터베이스에서 찾아낸 사용자 정보인 UserDetails 객체를 만든다.
7. User 객체의 정보들을 UserDetails가 UserDetailsService(LoginService)로 전달
-> AuthenticaitonProvider들은 UserDetails를 넘겨받고 사용자 정보를 비교한다.
8. 인증 객체 or AuthenticationException
-> 인증이 완료가 되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환한다.
9. 인증 끝
-> 다시 최초의 AuthenticationFilter에 Authentication 객체가 반환된다.
10. SecurityContext에 인증 객체를 설정
-> Authentication 객체를 Security Context에 저장한다.
'개발자 이야기 > 웹 보안' 카테고리의 다른 글
| SSL 인증서 동작 원리 (0) | 2024.04.20 |
|---|---|
| 암호화(AES, RSA, SHA) 관련 이야기 (0) | 2024.04.10 |