func VerifyJWT(tokenString string) (*jwt.Token, error) {
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// 验证签名算法
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("意外的签名算法: %v", token.Header["alg"])
}
return secretKey, nil
})
if err != nil {
return nil, err
}
// 验证claims
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
// 验证issuer
if iss, ok := claims["iss"].(string); !ok || iss != "myapp" {
return nil, fmt.Errorf("无效的issuer")
}
return token, nil
}
return nil, fmt.Errorf("无效的token")
}