Spring Security는 보안(인증, 인가, 권한)을 담당하는 Spring 하위프레임워크이다.

Security는 Filter와 클래스들의 집합으로 이루어져있다.

인증 (Autentication)

- 현재 유저가 누구인지를 확인/ 애플리케이션의 작업을 수행할 수있는 주체인지를 증명

권한 (Authorization)

- 인증객체의 여부에 따라 애플리케이션의 동작을 수행할 수 있도록 허락되있는지는 결정

인가 (Authorize)

- 현재 유저가 어떤 서비스, 페이지에 접근할 수 있는 권한이 있는지 검사

 

Authentiction Flow(인증의 흐름)

1. Client 에서 로그인 요청

2. UsernamePasswordAuthenticationFIlter에서 ID + PASSWORD를 담은 인증객체(Authentication)를

생성한다.

3. AuthenticationManager에게 인증객체를 넘기며 인증처리를 위임한다.

→ 내부에 한 개 이상의 Provide를 담은 List를 가지고 있고 그 List에서 적절한 Provider를 찾는다.

4. 인증관리자(c)는 적절한 Provider(AuthenticationProvider)에게 인증처리를 위임한다.

5. 해당 Provider는 input 정보(id, password)를 가지고 실제 인증 처리 역할을 한다.

-a. loadUserByUsername(username)메서드를 호출해서 유저객체를 요청한다.

-b. UserDetailsService 인터페이스에게 loadUserByUsername(username) 요청

b-1.Repository에 findById() 유저 객체 조회를 한다.

b-2.만약, 해당 유저객체가 존재하지 않으면 UsernameNotFoundException이 발생하고

UsernamePasswordAuthenticationFIlter에서 예외를 처리를 한다

→ FailHandler()에서 후속처리

b-3.존재한다면 UserDetails 타입으로 반환된다.(Member 객체도 UserDetails 객체로 변환되어 반환)

6. 인증관리자(loadUserByUsername(username))는 이제 Password 검증을 시작한다.

-a. 인증객체의 Password와 반환받은 UserDetails의 Password를 비교한다.

a-1. 일치하지 않을 경우 BadCredentialException 발생 후 인증 실패

-b. 성공한 인증객체(UserDetals와 authorities를 담은 인증 후 토큰 객체 Authentication)를

UsernamePasswordAuthenticationFIlter에 전달한다.

7. SecurityContext에 저장한다.

8. 이후 전역적으로 SecurityContext에서 인증객체를 사용가능하게 된다

'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / request.getHeader()  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14
Spring / Thymeleaf  (0) 2022.07.14

+ Recent posts