-
스프링 시큐리티 정리BackEnd/스프링 2022. 6. 24. 15:35
Authentication 현재 접근하는 주체의 정보과 권한을 담는 인터페이스 AbstractAuthenticationToken Authentication을 상속하고 있다. AbstractAuthenticationToken 을 상속해 custom Authentication 을 만들 수 있다.
-JWTAccessTokenAuthenticationToken ,
-UsernamePasswordAuthenticationTokenAuthenticationProvider -실제 인증에 대한 처리, Authentication 을 받아 인증이 완료된 Authentication를 반환
-인증 처리는 UserDetailService , JWTProvider 같은 서비스를 호출해 UserDetail 에 해당하는 객체를 가지고 Authentication 과 비교해 검증한다.AuthenticationProvider 를 상속해 custom provider 를 만들 수 있다.
-JWTAuthorizationProvider ,
-LoginAuthenticationProviderAuthenticationManager Provider 를 등록, Provider 로 AuthenticationToken 검증 후 Authentication 리턴, securityContext 에 저장 SecurityContext Authentication 를 보관 SecurityContextHolder 보안 주체의 세부정보,SecurityContext에 대한 세부 정보 저장 UserDetails UsernamePasswordAuthenticationToken 생성하기 위해 사용 UserDetailsService Login한 principal 정보로 레파지토리 조회를 해서,
UserDetail 에 매핑해 반환한다.GrantedAuthority 현재 사용자(principal)가 가지고 있는 권한들 ROLE_ADMIN,ROLE_USER 1. filter 중 스프링에서 제공하는 UsernamePasswordAuthenticationFilter를 살펴보면,
HttpRequest 에서 "username" , "password" 를 키값으로 들어온 값으로
2. UsernamePasswordAuthenticationToken 을 만들어준다. (Authentication)
이 때 Authentication은 권한정보가 없는 unauthenticated 이다.
AuthenticationManager 의 authenticate 를 호출하며 Authentication 을 넘긴다. (unauthenticated Authentication)
3. AuthenticationManager 의 내부에 등록된 Provider 가 넘겨받은 Authenication 에 대한 검증을 하는데,
검증을 하기 위해 UserService 를 호출해 반환된 UserDetail 의 정보를 Authenication 의 정보와 비교해 검증하고
검증에 실패시 exception, 성공하면 권한 정보를 추가한 검증된 Authentication을 반환한다. (authenticated Authentication)
아래는 프로젝트에서 filter 를 두개 등록했을 때 구조
-Filter와 Provider 를 두개로 나눈 이유는
JwtAuthentication 은 request 의 accessToken 으로 유저 정보 확인,
LoginAuthentication 은 request 의 username, password 정보로 유저 정보를 확인하기 때문이다.
- Authentication 을 상속하면 support 메서드를 재정의 할 수 있는데, 이는 Token 타입(Authenication 타입)에 따라 어떤 Provider 를 사용할 지 지정하는 것이다.
false 를 반환하면 authenricate 를 호출하지 않고, true 를 하면 다른 인증방식에도 동작해 영향을 끼친다.
authentication.isAssignableFrom(Token.class)
https://gregor77.github.io/2021/05/18/spring-security-0
https://velog.io/@sungjin0757/Spring-Security-UsernamPasswordAuthenticationFilter
https://velog.io/@dnjscksdn98/Spring-Spring-Security란
반응형'BackEnd > 스프링' 카테고리의 다른 글
form-data RequestDTO 매핑 @Setter 필수 (0) 2022.07.23 Test > BDD (0) 2022.06.28 스프링 테스트 MOCK (0) 2022.06.03 exception handler (0) 2022.03.10 스프링부트 익셉션 (0) 2022.03.09