如何使用jwt go库验证JSON Web令牌?

如何使用jwt go库验证JSON Web令牌?,go,jwt,jwt-go,Go,Jwt,Jwt Go,我正在使用golang的jwt go库,并使用HS512算法对令牌进行签名。我想确保令牌有效,文档中的示例如下: token, err := jwt.Parse(myToken, func(token *jwt.Token) (interface{}, error) { return myLookupKey(token.Header["kid"]) }) if err == nil && token.Valid { fmt.Println("Your token

我正在使用golang的jwt go库,并使用HS512算法对令牌进行签名。我想确保令牌有效,文档中的示例如下:

token, err := jwt.Parse(myToken, func(token *jwt.Token) (interface{}, error) {
    return myLookupKey(token.Header["kid"])
})

if err == nil && token.Valid {
    fmt.Println("Your token is valid.  I like your style.")
} else {
    fmt.Println("This token is terrible!  I cannot accept this.")
}

我知道
myToken
是字符串标记,
keyFunc
传递解析的标记,但我不明白
myLookupKey
函数应该做什么?,而且
token.Header
没有
kid
值,当我将其打印到控制台时,甚至认为该令牌包含我放入其中的所有数据,
token.Valid
始终为false这是一个bug吗?如何验证令牌的有效性?

应使用
keyFunc
返回库用于验证令牌签名的私钥。如何获得此密钥完全取决于您

文档中的示例显示了jwt go库提供的非标准(未在中定义)附加功能。使用标头中的
kid
字段(密钥ID的缩写),客户机可以指定令牌的签名密钥。在验证时,您可以使用密钥ID查找一个(可能有多个)已知密钥(如何以及是否实现此密钥查找取决于您自己)

如果您不想使用此功能,请不要使用。只需从
keyFunc
返回静态字节流,无需检查令牌头:

token, err := jwt.Parse(myToken, func(token *jwt.Token) (interface{}, error) {
    key, err := ioutil.ReadFile("your-private-key.pem")
    if err != nil {
        return nil, errors.New("private key could not be loaded")
    }
    return key, nil
})