[Spring Boot 2.7.0] Security + Jwt 구현 [2]

주성민·2022년 5월 31일
1
post-thumbnail

이전 작업에서 Spring Security에 대한 설정은 완료하였고, 이제 Jwt 토큰 인증을 진행해보도록 하겠습니다.
먼저 AuthToken의 인터페이스를 생성합니다.
그리고 AuthToken의 구현체 JwtAuthToken을 생성합니다.
이제 토큰 생성 및 유저 정보를 가져올 AuthTokenProvider 인터페이스를 생성합니다.
그리고 해당 인터페이스의 구현체 JwtAuthTokenProvider 클래스를 생성합니다.
이번에는 '사용자 이름 비밀번호 인증 토큰' 생성을 위한 클래스를 생성합니다.
이제 실제 데이터의 비밀번호와 매칭해서 인증을 진행할 PasswordAuthAuthenticationManager 클래스를 생성합니다.
여기까지는 비밀번호 인증을 통해 처음 로그인에 대한 인증 절차에 대한 클래스였고, 이번엔 로그인 이후 토큰 자체에 대한 검증을 진행할 클래스를 생성해보도록 하겠습니다.
생성한 Filter를 Security에 적용하기 위해 SecurityConfig 클래스로 이동해 추가해줍니다.마지막으로 서비스의 로직을 작성하도록 합니다.
이제 완료되었고, 로그인을 수행해봅시다.
아래 반환값으로 Jwt 토큰을 발급받을 수 있습니다.
403 에러를 받았던 '/v1/member/all' API를 호출하면서 header 값에 'x-auth-token'을 추가하여 로그인 후 발급받았던 토큰을 넣어줍니다.
403 에러 없이 정상적으로 호출됨을 확인할 수 있습니다.

순서를 정리하자면

/login
1. Login 시도
2. 비밀번호 토큰 인증 객체 'PasswordAuthAuthenticationToken' 발급
3. 발급받은 객체로 AuthenticationProvider를 상속한 PasswordAuthAuthenticationManager의 authenticate 메서드를 호출
4. 비밀번호 매칭 확인 후 유저의 정보를 가지고 있는 Authentication 객체 반환
5. SecurityContextHolder에 저장
6. Authentication 객체를 이용 새로운 토큰 발급
7. 반환

/all
1. JwtFilter 작동
2. AUTHORIZATION_HEADER의 설정 값인 'x-auth-token'을 HttpServletRequest에서 가져옴
3. 해당 토큰의 유효성 검사 진행
4. 확인 후 유저의 정보를 가지고 있는 Authentication 객체 반환
5. SecurityContextHolder에 저장
6. API 진행

해당 프로세스로 진행되는 것을 확인할 수 있습니다.

profile
Java Dev

1개의 댓글

comment-user-thumbnail
2022년 6월 9일

안녕하세요.
혹시 사용된 예제의 소스를 볼 수 있을까요?

답글 달기