인증, Authentication
-
스스로 누구인지 증명하는 것이다.
-
Authentication 객체는 사용자의 인증 정보를 담는 Token 개념이다. (UsernameAuthenticationToken , AnonymousAuthenticationToken , RememberMeAuthenticationToken...)
-
인증 시의 id , password를 담아 인증 검증을 위해 전달되어 사용된다.
-
인증 후 최종 Authentication 객체에는 사용자 정보를 담은 User 객체와 권한정보인 Authority가 들어있다.
-
Authentication 객체는 SecurityContext에 저장되어 전역적으로 참조가 가능
-
Authentication authentication = SecurityContextHolder.getContext().getAuthentication()
Authentication 객체의 구조 와 속성
-
principal : Object 타입, 사용자 아이디 or User 객체 저장
-
credentials : 사용자 암호
-
authorities : 사용자의 권한 목록
-
details : 인증 부가 정보, 활용할 데이터를 담는다.
-
Authenticated : 인증 여부
인증시 활용과 변화과정
-
사용자의 Login : username , password 전달
-
UsernamePasswordAuthentiationFilter 가 정보를 받아 Authentication 객체를 생성
-
principal 속성에 username , credential 속성에 password 를 저장
-
AuthenticationManager가 Authentication 객체를 가지고 인증처리 시작
-
인증 성공 시 AuthenticationManager가 Authentication 구현체를 생성, principal 속성에 인증에 성공한 유저정보인 UserDetails 를 저장, Credential은 보안상 비우기도 함, Authorities 속성에 권한정보를 담고 Authenticated 속성은 true 가 됨
-
최종 Authentication 객체를 SecurityContextHolder의 SecurityContext에 저장되어 전역적으로 사용 됨
Authentication 객체를 구현하여 원하는 정보를 담을 수 도 있으며 , Authentication 객체를 꺼내어 정보를 가져올 수도 있다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated();
http
.formLogin()
.successHandler(new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
Authentication authentication1 = SecurityContextHolder.getContext().getAuthentication();
authentication.getName();
authentication.getCredentials();
authentication.getAuthorities();
authentication.getDetails();
authentication.getPrincipal();
}
});
}
}
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
18.인증 저장소 필터 , SecurityContextPersistenceFilter (0) | 2020.09.22 |
---|---|
17.SecurityContextHolder, SecurityContext (0) | 2020.09.22 |
15.필터 초기화와 다중 보안 설정 (0) | 2020.09.21 |
14.DelegatingFilterProxy, FilterChainProxy (0) | 2020.09.21 |
13. 사이트 간 요청위조 : CSRF, CsrfFilter (0) | 2020.09.21 |