golang jwt 解析过期信息
2020-11-03 tech go 3 mins 1232 字

golang 下解析 jwt 信息,基本上都用的这个包. https://github.com/dgrijalva/jwt-go
官方的 GitHub 案例,也提供了简单的解析方法:
import "github.com/dgrijalva/jwt-go"
func ParseToken(token string) (*Claims, error) {
  tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) {
    return jwtSecret, nil
  })
  if tokenClaims != nil {
    if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid {
      return claims, nil
    }
  }
  return nil, err
}
ParseWithClaims方 法里会对token做验证,只有验证通过的才会进行后续的逻辑。
但对于已经过期的信息,验证显然是不能通过的,使用这个方法会抛出  get claim is nil  的错误。这时候应该使用  ParseUnverified 方法 跳过验证.
func GetUsernameFromToken(cookie string) (string, error) {
  token, _, err := new(jwt.Parser).ParseUnverified(cookie, jwt.MapClaims{})
  if err != nil {
    return "", err
  }
  if claims, ok := token.Claims.(jwt.MapClaims); ok {
    jwtToken := KeluJwtToken{}
    tmp, err := json.Marshal(claims)
    if err != nil {
      return "", err
    }
    err = json.Unmarshal(tmp, &jwtToken)
    if err != nil {
      return "", err
    }
    return jwtToken.Username, nil
  }
  return "", errors.New("cannot parase cookie")
}
