Spring Security, JWT 간단 정리

 

  • 클라이언트가 특정 url, 리소스에 접근 적절한 권한이 있는지 확인하는 일련의 과정
  • 스프링 시큐리티 아키텍쳐

UsernamePasswordAuthenticationToken 
Http Request 
2 
3 
AuthenticationFilter 
9 
10 
AuthenticationManager 
<<interface>> 
implements 
ProviderManager 
UserDetails 
<<interface>> 
implements 
User 
4 
8 
AuthenticationProvider(s) 
7 
5 
SecurityContextHolder 
SecurityContext 
Authentication 
Spring Security 
Authentication Architecture 
Chathuranga Tennakoon 
wwu.springbootdev.com 
UserDetailsService 
6

  • 클라이언트로부터 로그인 요청이 오면 AthenticationFilter에서 토큰 생성.
  • 토큰은 AthenticationProvider 넘겨진다.
  • AthenticationProvider UserDetailService에게 사용자 정보를 넘겨주어 데이터 베이스에서 사용자 인증정보를 가져온후 사용자 정보가 담긴 UserDetails 객체를 만든다.
  • AthenticationProvider 생성된 UserDetails객체와 토큰의 정보를 비교하여 완료되면 Athentication 객체가 반환되고 객체는 Session영역의 Security Context 저장된다.

 

JWT(JSON Web Token)

  • JSON형식의 문서를 안전하게 전송하기 위한 웹표준.
  • JSON 객체를 암호화하여 만든 문자열 값으로 ,변조가 어렵다
  • 토큰 자체에 데이터가 들어가 있는것이 특징. 토큰 만료 시간 이나 회원권한등을 저장할 있다.
  • JWT .구분자로 세부분으로 나뉘어져 있다. 헤더.내용.서명
    • 헤더에는 토큰정보와 해싱알고리즘, 내용은 실제저장되는 데이터, 서명에는 위변조를 방지하기위한 값이 들어다.
  • 세션, 쿠키 기반의 로그인 방식이 아닌 토큰 기반의 로그인을 하게 되면 세션이 유지되는않는 다중서버에서 로그인 유지가 가능, 번의 로그인으로 유저정보를 공유하는 여러 도메인에서 사용할 있다.

 

  • 과정
    • 서버에서 로그인 처리가 완료되면 클라이언트에게 권한 정보가 들어있는 JWT토큰을 넘겨준다.
      • request Header 토큰값이 존재하면 토큰을 확인하고 Authentication 객체를 생성 Context 저장.
      • 토큰이 존재하지 않다면 회원 확인 토큰 설정 및 생성하여 클라이언트에게 반환
    • 클라이언트는 서버에게 요청 마다 헤더에 토큰을 담아서 전송한다.
    • 서버는 헤더에 담긴 토큰 값을 확인 하고 권한에 맞는 적절한 리소스를 제공.
  • 적용
    • 위의 시큐리티 과정에서 AthenticationProvider 역할을 JwtTokenProvider클래스(@Component) 생성하여 토큰을 조회, 생성등 토큰 관련 메서드들을 정의해주어 대신한다.
    • 컴포넌트는 인증 작업이 진행되는 filter에서 사용되어진다. JwtAuthenticationFilter라는 filter클래스를 만들어서 토큰을 확인하는 작업들을 수행.

 

 

 

 

댓글

가장 많이 본 글