인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

임도현님의 프로필 이미지

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Users Microservice - JWT 처리 과정

jwt.io 에서 invalid signature 가 게속 뜨는 문제

작성

·

5.9K

1

1) 해당 사이트에서

  1. secret 을 먼저 설정해주고

  2. 복붙하면 invalid 하다고 뜹니다.

스택 오버플로우를 참고해서 순서를 알았는데

안되서 순서를 바꿔서 해봐도 잘 되지 않습니다. (base64 encoded 등등 순서 바꾸고 여러시도를 해봄)

코드와 dependency는 동일하고 secret 만 secret 으로 바꿨습니다.

 

2) 뒤에서 강의에서 api gateway 에서 AuthorizationHeaderFilter 에서 검증과정은 무사히 통과 합니다.

제가 놓친게 있을까요?

답변 1

1

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

올려주신 이미지에 포함된 토큰 값이 잘못된게 아닌가 싶습니다. 아래 화면처럼 입력해 보면 저희쪽에서도 오류가 발생하네요. 설정하신 HEADER, PAYLOAD, SECRET 값 등은 정상 토큰을 사용하실 경우 오류없이 작동되는 것 같습니다. 사용하신 토큰을 공유해 주시면 다시한번 테스트 해 보겠습니다.

아래 토큰은 정상적으로 작동될 때이 토큰값이니 이것을 Encoded에 적용해서 테스트 해 보시기 바랍니다.

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.MgOsygXloaQRJC2_clPpgLNr85uitvTUetbwWYweMmk

감사합니다.

임도현님의 프로필 이미지
임도현
질문자

답변 감사합니다.

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2OTljYmM0OC04NWFhLTRmOWYtYjhjNi1lYzBlMTk5MjBjNWEiLCJleHAiOjE2NjY4NDUxNDJ9.l55XSqdxYtpDmHXsrBspYaNi_cabf-WXHo10-XHHFRQ

 

이것이 제토큰입니다. (방금 로그인해서 얻어온 토큰 결과입니다. )

String token = Jwts.builder()
        .setSubject(userDetails.getUserId())
        .setExpiration(new Date(System.currentTimeMillis() +
                Long.parseLong(env.getProperty("token.expiration_time"))))
        .signWith(SignatureAlgorithm.HS256, env.getProperty("token.secret"))
        .compact();

제가 복붙한것은 postman 에서 로그인 요청시 받아온 header에 들어간 토큰 값입니다.

1)jwt.io에서 우측하단의 secret 값을 token.secert의 값으로 변경후 왼쪽 encoded에 나오는 토큰 값이랑

2) 제가 postman에서 로그인 성공해서 가져온 token 값이랑 같거나 아니면 적어도 valid해야 한거 아닌가요?

1,2 이 서로 다른 결과를 내는 이유가 궁금합니다.

 

 

시나리오

1) postman에서 로그인 성공해서 받아온 token 값 encoded에 복붙

2) decoded에 정보가 뜨고 secret이 다름으로 invalid signature 발생

3) decoded 에 secret을 나의 token.secret 으로 바꿔줌 -> encoded 변경 발생 -> valid signature 발생

4) 다시 나의 postman token을 encoded에 복붙시 invalid signature 발생

 

왜 3번 과정에서 생긴 token은 valid하고 과 제 postman login 성공 token은 invalid 한지 궁금합니다....

imagesecret base64 encoded를 체크하고 시나리오를 반복해도 동일합니다.

 

image

해당 토큰으로 서비스는 잘 돌아갑니다. (localhost:8000/user-service/health_check) 시 401안뜨고 잘통과합니다.