Go 언어로 개발하면서 JWT 파서로 jwt-go 패키지를 사용하고 있다. 패키지 사용 중 겪은 경험을 기록해두려 한다.
- 문제: JWT Payload 내 19자리의 숫자 입력 값을 추출 후 출력하면 값이 달라져 있는 상황
- 원인: 파서에서 숫자 값을 모두
float64
타입으로 취급- 관련 링크: https://github.com/dgrijalva/jwt-go/issues/224
float64
데이터 타입은15자리 정밀도 보장
이라 19자리의 정밀도는 보장되지 않는 것
- 해결: 위의 GitHub Issue 코멘트를 참고하여 JSONNumber 플래그와 Custom Struct Type 사용
수신한 JWT를 https://jwt.io 사이트에서 Decode 해서 Payload 값을 확인하며 문제를 검토했었는데, 사이트에서도 값이 바뀌어 보이고 있었다. 그래서 올바른 방법으로 해결을 해놓고서도 Decode 된 값과 코드에서 추출한 값이 달라 삽질을 좀 했다. 제대로 된 값은 여기에서 확인을 할 수 있었고, 위의 해결 방법으로 올바르게 파싱되었다.