Authentication
- principal 과 grantAuthority를 authentication에 넣어서 관리함
1. principal
-
인증을 거치고 난 후 인증된 사용자 정보
-
authentication은 securityContext로 한번 감싸고 감싼걸 다시
-
securityContextHolder로 감싼다.
-
form 인증시 authentication의 구현체 usernamepasswordAuthenticationToken이
-
authentication에 담긴다.
-
UserDetailsService를 구현한 클래스에서 UserDetails를
-
return하는 loadUserByUsername이란 메소드에서 return하는 객체의 type이 곧 principle
2. grantAuthority
- SimpleGrantedAuthority 객체에 권한이 담겨져있음.
SecurityContext
- authentication을 제공함.
SecurityContextHolder
- securityContext를 제공하고 기볹벅으로 ThreadLocal을 사용한다.
- ThreadLocal (한 thread 내에서 공유하는 저장소)
- thread가 변경되면 제대로 된 authentication 정보를 참조할수 없다.
UserDetailsService
- 유저정보를 UserDetails 타입으로 가져오는 DAO 인터페이스
- 인증을 하는건 아님.
- spring security한테 유저정보를 제공하는 역할
- 실제로 인증을 하는 역할은 authenticationManager
AuthenticationManager
- 실제 인증을 담당하는 역할
- 구현체로 ProviderManager 를 기본으로 사용.
ProviderManager
- ProviderManager에서 인증을 AuthenticationProvider를 구현한 구현체들한테 위임하는데
- AuthenticationProvider를 구현한 구현체중 AnonyMousAuthenticationProvider로 검사하고
- 없으면 parent ProviderManager 를 호출 DAOAuthenticationProvider로 검사한다.
- 여러 절차를 거치고 retriveUser 메소드에서 loadUserByUsername 메소드를 호출한다.
- loadUserByUsername은 사용자가 따로 UserDetailServer로 구현한 메소드가 있다면
- 그걸 return하고 아니면 UserDetail 타입으로 return한다.
'개발 > SpringSecurity' 카테고리의 다른 글
Spring Security - 2 (0) | 2020.08.10 |
---|