식구하자 프로젝트 중 JWT 검증과정에 발생한 오류에 대해 포스팅하려고 한다
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.
이미 시큐리티를 활용하여 자체 로그인을 구현하였고, 카카오 소셜 로그인 구현중에 해당 오류가 발생하였다.
에러의 내용이 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);
}