Spring Security에서 로그인이라는 것은 Security Context안에 있는 authenticaion 객체가 authenticated가 true인 상황을 로그인 한것으로 판단한다.
하지만 AnonymouseAuthenticationToken은 Authenticated가 true여도 Anonymouse 상태이기 때문에 로그인 하지않은 사용자로 간주
SecurityCotextHolder는 인증보관소이고 SecurityContext가 Authentication을 보관하는 인증 보관함이 된다.
인증을 제공하는 것을 AuthenticationProvider(인증제공자)이라 하며 하나 이상 존재할 수 있습니다.
인증 제공자를 관리하는 것을 AuthenticationManager(인증관리자)라고 하며 인증관리자를 구현하고 있는 구현체가 ProviderManager(인증 제공 관리자)라고 하며 마찬가지로 하나이상 존재할 수 있다.
Authentication안에는 GrantedAuthority,credentials,details등이 존재한다.
Authentication(인증토큰)을 제공하는 filter들
UsernamePasswordAuthenticationFilter : 폼 로그인 -> UsernamePasswordAuthenticationToken
RememberMeAuthenticationFilter : remember-me 쿠키 로그인 -> RememberMeAuthenticationToken
AnonymousAuthenticationFilter : 로그인하지 않았다는 것을 인증함 -> AnonymousAuthenticationToken
SecurityContextPersistenceFilter : 기존 로그인을 유지함
(기본적으로 session 을 이용함)
BearerTokenAuthenticationFilter : JWT 로그인
BasicAuthenticationFilter : ajax 로그인 -> UsernamePasswordAuthenticationToken
OAuth2LoginAuthenticationFilter : 소셜 로그인 ->
OAuth2LoginAuthenticationToken, OAuth2AuthenticationToken
OpenIDAuthenticationFilter : OpenID 로그인
Saml2WebSsoAuthenticationFilter : SAML2 로그인
Authentication 은 인터페이스로 아래와 같은 정보들을 갖고 있다.
Set authorities : 인증된 권한 정보
principal : 인증 대상에 관한 정보. 주로 UserDetails 객체가 옴
credentials : 인증 확인을 위한 정보. 주로 비밀번호가 오지만, 인증 후에는 보안을 위해 삭제함.
details : 그 밖에 필요한 정보. IP, 세션정보, 기타 인증요청에서 사용했던 정보들.(request에 대한 detail정보)(principal details와 다름)
boolean authenticated : 인증이 되었는지를 체크함