💻 Backend/TIL

[TIL] 2022-02-18 / JWT(Json Web Token)

미미누 2022. 2. 19. 19:22

[한 것]

  • 데브싱크 프로젝트 Post 부분 TDD 작성
  • BANGU 프로젝트 JWT 적용 & 공부

[배운 것]

https://ws-pace.tistory.com/87

spring boot REST API Web 프로젝트 (10) - Jwt AccessToken + RefreshToken으로 보안성과 사용자 편의성 고도화하

스프링 부트 REST API WEB 프로젝트 깃헙 링크 https://github.com/choiwoonsik/springboot_RestApi_App_Project/tree/main/restApiSpringBootApp 수행 목록 환경구성 및 helloworld 출력 H2 DB 연동 Swagger API..

ws-pace.tistory.com

출처: 위 글을 참고해서 JWT& 스프링 시큐리티를 프로젝트에 적용해보고 공부해보았다.


[JWT 구조]

1. JwtProvider
Json Web Token 생성 및 유효성 검증을 하는 컴포넌트이다. claim 정보에는 토큰에 부가적으로 실어 보낼 정보를 담을수 있음(회원 정보를 구분할 수 있는 값)

2. JwtAuthenticationFilter
jwt이 유효한 토큰인지 인증하기 위한 필터 ( 이 필터를 Security 설정 시 UsernamePasswordAuthentication 앞에 세팅해서 로그인폼으로 반환하기 전에 인증 여부를 Json으로 반환)

3. SpringSecurity Configuration
서버에 보안을 적용

4. UserDetailsService(인터페이스)
토큰에 세팅된 유저 정보로 회원정보를 조회

5. 로그인 예외처리 추가
로그인 예외 처리를 위한 @ExceptionHandler를 추가

6. 가입 시에는 Password 인코딩을 위해서 passwordEncoder 설정, 로그인 성공 시 결과로 Jwt을 발급

스프링 시큐리티 특징과 구조

  • 인증관리자와 접근결정 관리자를 통해서 사용자의 리소스 접근을 관리한다
    • 인증관리자 : UsenamePasswordAuthenticationFilter
    • 접근결정 관리자 : FilterSecurityInterceptor

스프링 시큐리티 작동 구조

스프링 시큐리티 사용시 스프링은 DispatcherServlet 앞단에 Filter를 배치시켜서 요청을 가로챈다. 클라이언트에 접근 권한이 없다면 인증화면으로 자동 리다이렉트 시킨다.

클라이언트가 리소스를 요청할 때 접근 권한이 없는 경우 기본적으로 로그인 폼으로 보내게 되는데 그 역할을 하는 Filter가 UsernamePasswordAuthenticationFilter이다.

RestAPI 구조에서는 로그인 폼이 따로 존재하지 않으므로 인증권한이 없다는 오류를 JSON 형태로 반환해줘야 한다. 따라서 UsernamePasswordAuthenticationFilter가 작동하기 전에 해당 처리를 해줘야 한다.


[JWT 메커니즘]


[느낀점]

JWT 적용하고 이해하는 것이 쉬운게 아니다. 좀 더 공부 해야 겠다.

[할 것]

데브싱크 코드 TDD 작성하기
토이 프로젝트 하기
MVC 2편 강의 듣기
알고리즘 문제 풀기

'💻 Backend > TIL' 카테고리의 다른 글

TIL / 2022-02-25 스프링  (0) 2022.02.26
TIL 2022-02-22 / 스프링  (2) 2022.02.22
TIL 2022-02-15 / 스프링  (0) 2022.02.16
TIL / 2022-02-11  (0) 2022.02.12
TIL / 2022-02-08 스프링  (0) 2022.02.09