Spring Security + JWT(1)

shinhyocheol·2021년 6월 30일
0

기본적으로 JWT를 사용하기 위한 디펜던시를 추가했다.

먼저 JWT를 이용해 사용자 검증을 하려면 몇 가지 기능이 필요하다.

  • 검증할 수 있는 토큰이 존재해야하기 때문에 토큰 생성 기능
  • 토큰 유효기간 검사 기능
  • 클라이언트로부터 토큰을 넘겨받는 기능
  • 토큰검증이 완료된 후 해당 클라이언트의 권한을 설정하는 기능

요렇게 4가지로 분류하여 기능을 작성했다.

토큰 생성은 로그인 시 사용될 것이고 나머지는 인증에 사용될 것이다.

필자는 Filter를 사용해서 인증 절차를 거치도록 작업했다.

순서대로 서술해보자면

생성

  • 클라이언트는 로그인 요청
  • 서버는 넘겨받은 ID를 가지고 DB에 해당 ID로 저장되어있는 데이터 조회
  • 조회하기 위해 받은 데이터에 있는 비밀번호와 클라이언트로부터 넘겨받은 비밀번호가 일치하는지 검사
  • 모든 절차가 정상적으로 진행됐다면 해당 유저 데이터를 기반으로 JWT토큰 생성 요청
  • 프로바이더에서는 해당 유저 데이터 정보, 지정된 유효기간, 지정된 암호화 키방식을 Jwt 클레임 객체에 담고, 토큰 생성
  • 생성된 토큰을 리턴 받은 서버는 클라이언트에게 응답

인증

  • 필터에서는 요청(request) 객체에 토큰이 존재하는지 체크
  • 토큰이 null 여부와 동시에 토큰의 유효기간 체크
  • 토큰 유효여부 검사가 끝나면 해당 토큰을 생성할 때 클레임 객체에 넣어놓은 사용자의 정보가 있을것이다.
  • 해당 정보를 파싱후 조합해 UsernamePasswordAuAuthenticationToken을 만들어 전달하고 마지막 검증절차 진행

이렇게 구조를 짰다. 물론 이게 무조건 옳은 방법도 아니고 정답이라는 것도 절대 아니다.
이제 테스트를 위해 그에 맞는 API를 간단하게 작성해보자.

Spring Security + JWT(2)

profile
놀고싶다

0개의 댓글