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")
}