본문 바로가기
스파르타 내배캠

[TIL] #32. Spring Security

by saemsaem 2024. 6. 5.


 

 [ Spring Security ] 

: 인증과 접근 제어를 위해 세부적인 맞춤 구성이 가능한 강력한 프레임워크 (스프링 애플리케이션에 보안 적용 과정을 간소화함)
⇒ 보안을 위한 프레임워크
⇒ 애플리케이션에 맞게 security를 맞춤 구성할 줄 알아야 한다

 

Spring Security의 인증 프로세스

Spring Security의 인증 프로세스

1. client 요청 → (controller에 도달하기 전에) filter가 가로챔
2. 인증필터 - AuthenticationManager(인증관리자) 에 책임 위임 → AuthenticationProvider(인증공급자) 에 인증 로직이 구현되어 있음 → 인증처리
3. 인증처리가 사용자 검증인 경우 : UserDetailsService / 암호 검증인 경우 : PasswordEncoder
4. 인증결과 반환 → 필터에 까지 결과 반환됨
5. 인증 결과를 securityContext에 저장

- Filter를 제외하고는 모두 인터페이스이기 때문에 필요한 부분만 구현하면 된다 !!

 


 

사용자 관리 (UserDetailsService)

: 사용자의 세부 정보 찾기

AuthenticationProvider가 UserDetailsService에 사용자 관리에 대한 책임을 위임

loadUserByUserName() 메서드를 이용해 사용자를 찾음
  - 사용자 정보를 위치(DB,server,,,)에 맞게 찾아올 수 있도록 구현하면 됨

  • UserDetailsService : 인증을 위해 사용자 찾음
    • UserDetails : 사용자를 설명
    • GrantedAuthority : 사용자가 실행할 수 있는 작업을 정의 (읽기, 쓰기, 삭제 ,,,)
    • UserDetailsManager : UserDetailsService에서 확장된 형태. 사용자의 생성, 수정, 삭제, 암호 수정,,, 작업 지원

 


 

암호 처리 (PasswordEncoder)

AuthenticationProvider가 PasswordEncoder에 암호 검증에 대한 책임을 위임함

  • PasswordEncoder : 암호가 유효한지 확인
    • NoOpPasswordEncoder : 인코딩하지 않음 (실제로 절대 사용 X)
    • StandardPasswordEncoder : SHA-256을 이용해 암호를 해시. (강도가 약하기 때문에 사용하지 않는 것이 좋음)
    • Pbkdf2PasswordEncoder : PBKDF2 이용
    • BCryptPasswordEncoder : bcrypt 강력 해싱 함수로 암호 인코딩
    • SCryptPasswordEncoder : scrypt 해싱 함수로 암호 인코딩
  • 키 생성기
    • BytesKeyGenerator : 특정 길이의 바이트 만큼의 키 생성
    • StringKeyGenerator : 인코딩된 문자열로 키 생성

 


 

인증 구현 (AuthenticationProvider, SecurityContext)

Controller는 securityContext에 저장된 정보를 이용할 수 있다.

AuthenticationProvider로 인증처리되면 → 세부정보(인증 정보가 담긴 Authentication 객체)를 SecurityContext에 저장 
→ controller에서 securityContext의 인증정보 이용 가능

  • Interface
    • AuthenticationProvider : 인증 로직 처리. 사용자 관리 책임은 UserDetatilsService에 위임, PasswordEncoder에 암호 검증 책임을 위임
    • Authentication : 인증 요청 이벤트. 접근 요청 엔티티의 세부 정보 담음
  • Method
    • authenticate( ) : 인증 로직 정의, 처리
      • 인증이 실패하면 AuthenticationException 던짐
      • 현재 AuthenticationProvider에서 지원되지 않는 인증객체 받으면 null을 리턴
      • 완전히 인증된 객체를 나타내는 Authentication 인스턴스를 리턴
      • ⇒ 인증에 성공한 Authentication 리턴
    • supports( ) : 현재 AuthenticationProvider가 해당 Authentication을 지원하는지 확인
      • 지원하면 true / 지원하지 않으면 false를 반환
      • ⇒ 해당 Authentication을 지원하는지 확인

 

 

'스파르타 내배캠' 카테고리의 다른 글

[TIL] #34. Web Application, Servlet  (0) 2024.06.10
[TIL] #33. ResponseEntity  (0) 2024.06.10
[TIL] #31. @Annotation  (0) 2024.06.04
[TIL] #30. Filter  (0) 2024.06.03
[TIL] #29. JWT  (0) 2024.06.03