如何使用jwt go库验证JSON Web令牌?
我正在使用golang的jwt go库,并使用HS512算法对令牌进行签名。我想确保令牌有效,文档中的示例如下:如何使用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
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
})