Spring Security의 정의와 동작

켈로그·2023년 7월 11일
0

스프링프로젝트

목록 보기
3/3

🔑 Spring Security란?

  • 인증(Authentication), 인가(authorizaion)에 대한 처리를 위임하는 Spring의 하위 프레임워크

🔑 Spring Security의 용어
  • 인증 (Authentication) : 사용자가 본인인지 확인하는 절차 (확인 절차)
  • 인가 (Authorization) : 인증된 사용자가 요청한 자원에 접근이 가능한지 결정하는 절차 (허락 절차)
  • 접근 주체 (Principal) : 보호받는 Resource에 접근하는 대상
  • 비밀번호 (Credential) : Resource에 접근하는 대상의 비밀번호
  • 권한 : 인증 과정을 통해 주체가 증명된 이후 권한 부여

🔑 Spring Security의 동작 원리

  • Spring Security는 인증, 인가의 순서로 진행
  • 인가 과정에서 해당 리소스에 대한 접근 권한이 있는지 확인
  • 인증, 인가 과정을 위해 Principal을 아이디로 Credential을 비밀번호로 사용하는 인증 방식을 사용

1. 요청 수신
<- 사용자가 form을 통해 로그인 정보가 담긴 Request를 전송

2. 토큰 생성
- AuthenticationFilter가 요청을 받아서 UsernamePasswordAuthenticationToken(인증용 객체) 생성
- 인증용 객체 해당 요청을 처리할 수 있는 Provider을 찾는데 사용

3. AuthenticationManager에게 인증용 객체를 전달
- AuthenticationManager는 Provider를 List 형태로 갖고 있음

4. AuthenticationManager 인터페이스를 거쳐 AuthenticationProvider에 정보 전달
- Token을 처리할 수 있는 AuthenticationProvider 선택
- 등록된 AuthenticationProvider들을 조회하여 인증을 요구

5. AuthenticationProvider는 UserDetailsService를 통해 입력받은 사용자의 username으로 loadUserByUsername() 메소드를 호출해서 DB에서 조회
- DB에 있는 사용자의 정보를 UserDetails형으로 가져옴
- authenticate() 메소드를 통해 DB에 저장된 정보와 입력한 로그인 정보(인증용 객체) 비교
- 일치하는 경우 Authentication 반환(return), 일치하지 않으면 예외

6. 인증이 완료되면 사용자 정보를 가진 인증용 객체를 SecurityContextHolder에 담은 후 AuthenticationSueccessHandle을 실행(실패 시, AuthenticationFailureHanlder 실행)




🔑 로그인 과정

  1. 로그인 시도(ID, password 입력) -> username(ID)와 password가 HTTP BODY로 전달
  2. 인증 관리 -> UserDetailsService에게 username을 전달하고 회원 상세정보를 요청
  3. DB에서 회원 조회 -> 조회된 정보를 UserDetails로 변환
  4. 인증 관리자가 인증 처리 -> UserDetailsService가 전달해준 UserDetails의 정보와 클라이언트가 시도한 username, password 일치 여부 확인
  5. UserDetails의 password는 암호문이기 때문에 클라이언트가 보낸 password를 암호화하여 비교
profile
좋은 것만 드려요💪

0개의 댓글