[JWT] The token was expected to have 3 parts, but got 1.

이민우·2023년 9월 17일

식구하자

목록 보기
1/5

식구하자 프로젝트 중 JWT 검증과정에 발생한 오류에 대해 포스팅하려고 한다

👿Problem


 Error logging in: The token was expected to have 3 parts, but got 1.
 (403 error) P.P.security.CustomAuthorizationFilter 
 : Error logging in: The token was expected to have 3 parts, but got 1.

이미 시큐리티를 활용하여 자체 로그인을 구현하였고, 카카오 소셜 로그인 구현중에 해당 오류가 발생하였다.

👼 Solution


에러의 내용이 3 parts가 적혀있는 것을 보아 JWT 형식에 맞지 않는 무언가 들어왔다고 판단하여 Request Header를 확인하였다. 역시나 카카오 소셜 로그인 진행중에 access_token이 jwt 형식에 맞지 않는 토큰을 보내주고 있었다.

따라서 해당 에러를 해결하기 위해 카카오 로그인시 따로 전용 jwt토큰 발급 클래스를 만들고 CustomAuthorizationFilter를 지나가게 처리하였다.

@Component
public class JwtTokenUtil {

    @Value("${JWT.SECRET}")
    private String SECRET_KEY;

    // 토큰 유효 시간 5시간
    Algorithm algorithm = Algorithm.HMAC256("secretKey".getBytes());

    public String generateAccessToken(UserDetails user) {
        return JWT.create()
                .withSubject(user.getUsername())
                .withExpiresAt(new Date(System.currentTimeMillis() + 10 * 60 * 1000))
                .withClaim("roles", user.getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()))
                .sign(algorithm);
    }

    public String generateRefreshToken(String email) {
        return JWT.create()
                .withSubject(email)  // using email as the subject
                .withExpiresAt(new Date(System.currentTimeMillis() + 300 * 60 * 1000))
                .sign(algorithm);
    }
profile
백엔드 공부중입니다!

0개의 댓글