[TIL] 8월 11일

yeon·2021년 8월 11일
0

이슈트래커 TokenProvider 테스트 진행시 에러 발생

JWT signature does not match locally computed signature.

에러발생할 때 테스트 코드는 아래와 같다.

@SpringBootTest
class TokenProviderTest {

    @Autowired
    private TokenProvider tokenProvider;

    private Long userId;

    @Value("${jwt.secret}")
    private String secretKey;

    @BeforeEach
    void setUp() {
        userId = 1L;
    }

    /**
     * 생성한 토큰의 유효기간이 현재 시점 이후임을 보장한다.
     */
    @Test
    @DisplayName("토큰 생성 기능 테스트 ")
    void createToken() {
        String token = tokenProvider.createToken(userId);
        Jws<Claims> claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);

        assertThat(claims.getBody().getExpiration()).isAfter(new Date());

    }
}

검색을 해보니 토큰 생성할 때 secretKey와 파싱할 때 secretKey가 달라서 발생하는 문제라고 한다.

디버깅 해보니 Jws<Claims> claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token); 파싱하는 이 부분에서 setSigningKey()의 인자가 바이트로 인코딩된 key를 넣었어야 했는데 그냥 문자열을 넣어서 발생한 것이였다.

인자를 secretKey.getBytes() 로 변경하니 테스트가 잘 통과한다.

오늘 한일

  • 코테 스터디 진행, LeetCode 문제 풀었다. 오늘은 만족스럽게 풀지 못했다. 거의 12일만에 코테 문제를 풀었는데 매일매일 풀어야겠다. 이미 전에 마음먹었는데 할일이 많아서 쉽지 않다. 유지하지는 못했지만 지금부터 다시 하면 되니깐...! 하루에 적어도 한문제는 풀어야겠다.
  • ITDA 프로젝트 로그인 구현 중, TokenProvider와 TokenExtracter에 대한 테스트 작성, Argument Resolver로 userId 값을 할당하는 것 구현했다. Interceptor와 Argument Resolver에 대한 테스트는 어떻게 할까 고민했는데 로치에게 통합테스트로 진행하면 될거 같다는 답을 들었다.
  • 스프링 기본편 강의 듣는 중

2개의 댓글

comment-user-thumbnail
2021년 8월 11일

하루에 한문제씩 ㅎㅇㅌ

1개의 답글