[ Spring Security ]
: 인증과 접근 제어를 위해 세부적인 맞춤 구성이 가능한 강력한 프레임워크 (스프링 애플리케이션에 보안 적용 과정을 간소화함)
⇒ 보안을 위한 프레임워크
⇒ 애플리케이션에 맞게 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을 지원하는지 확인
- authenticate( ) : 인증 로직 정의, 처리
'스파르타 내배캠' 카테고리의 다른 글
[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 |