В итоге я позвонил int64
на claims["exp"]
напрямую, а не пытался сначала преобразовать его в строку:
package main
import (
"encoding/json"
"fmt"
"log"
"time"
jwt "github.com/dgrijalva/jwt-go"
)
func main() {
tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
token, _, err := new(jwt.Parser).ParseUnverified(tokenString, jwt.MapClaims{})
if err != nil {
log.Fatal(err)
}
claims, ok := token.Claims.(jwt.MapClaims)
if !ok {
log.Fatalf("Can't convert token's claims to standard claims")
}
var tm time.Time
switch iat := claims["iat"].(type) {
case float64:
tm = time.Unix(int64(iat), 0)
case json.Number:
v, _ := iat.Int64()
tm = time.Unix(v, 0)
}
fmt.Println(tm)
}
, которая печатает
> go run main.go
2018-01-17 17:30:22 -0800 PST
Обратите внимание, что я 'мы заменили exp
на iat
, поскольку в упрощенном примере (полученном из jwt.io) нет утверждения exp
, но есть iat
.