2023.01.24.TUE

ronglong·2023년 1월 24일
0
  • 스프링 시큐리티, JWT를 적용할 때 만든 클래스가 너무 많아서, 클래스와 클래스가 가진 메서드, 멤버 클래스 이름만 정리했다. 하지만 여전히 어렵고 복잡하다,,
    손으로 한 번 적어보긴 했지만, 여기에도 중요해보이는 클래스 위주로 조금 적어봐야겠다.
  • SecurityConfiguration
    - 스프링 시큐리티에서 전체 시큐리티 체인을 설정하는 가장 중요한 클래스로 생각됨
    • SecurityFilterChain filterChain(HttpSecurity http) throws Exception{}
    • PasswordEncoder passwordEncoder(){}
    • CorsConfigurationSource corsConfigurationSource(){}
    • class CustomFilterConfigurer extends AbstractHttpConfigurer<CustomFilterConfigurer, HttpSecurity> {configure()}
  • CustomUserDetailsService
    - AuthenticationProvider에게 UserDetails를 넘겨주는 역할
    • UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{}
    • private class MemberDetails extends Member implements UserDetails{}
  • CustomAuthorityUtils
    - 권한 생성 및 저장 클래스
    • List< GrantedAuthority> createAuthorities(List< String> roles){}
    • List< String> createRoles(String email){}
  • JwtTokenizer
    - JWT 토큰 생성 및 검증 클래스
    • String encodeBase64SecretKey(String secretKey){}
    • String generateAccessToken(){}
    • String generateRefreshToken(){}
    • Jws< Claims> getClaims(){}
    • void verifySignature(){}
    • Date getTokenExpiration(){}
    • Key getKeyFromBase64EncodedKey(String base64EncodedSecretKey){}
  • JwtAuthenticationFilter
    - AuthenticationFilter 클래스
    • Authentication attemptAuthentication(){}
    • void successfulAuthentication(){}
    • String delegateAccessToken(){}
    • String delegateRefreshToken(){}
  • JwtVerificationFilter
    - 클라이언트의 리퀘스트에 포함된 JWT 토큰 검증 클래스
    - boolean shouldNotFilter(){}
    - void doFilterInternal(){}
    - Map<String, Object> verifyJws(){}
    - void setAuthenticationToContext(){}
  • 기타
    • Plain Text를 Secret Key로 사용하지 않는다. Key는 항상 바이너리(byte array)이기 때문.
    • Secret Key의 byte[]를 Base64 형식의 문자열로 인코딩
    • Username/Password 기반의 로그인 인증은 OncePerRequestFilter 등 Spring Security에서 지원하는 Filter를 이용해서 구현 가능하며, Controller의 REST API 엔드포인트로도 구현 가능.
    • JWT에서 Claims를 파싱 가능 == 내부적으로 서명(Signature) 검증 성공
    • SimpleGrantedAuthority 객체를 생성할 때 생성자 파라미터로 넘겨주는 값은 “ROLE_USER" 형태.

0개의 댓글