如何使用 jwt-go 库验证 JSON Web Token?
How to verify a JSON Web Token with the jwt-go library?
我在 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
始终为假。 这是一个错误吗?如何验证令牌是否有效?
keyFunc
应该是 return 库应该用来验证令牌签名的私钥。如何获得此密钥完全取决于您。
文档中的示例显示了 jwt-go 库提供的 non-standard(未在 RFC 7519 中定义)附加功能。使用 header 中的 kid
字段(key ID 的缩写),客户端可以使用 which key 指定令牌被签署了。在验证时,您可以使用密钥 ID 查找(可能的几个)已知密钥之一(如何以及是否实施此密钥查找取决于您)。
如果您不想使用此功能,请不要使用。只是 return 来自 keyFunc
的静态字节流而不检查令牌 headers:
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
})
我在 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
始终为假。 这是一个错误吗?如何验证令牌是否有效?
keyFunc
应该是 return 库应该用来验证令牌签名的私钥。如何获得此密钥完全取决于您。
文档中的示例显示了 jwt-go 库提供的 non-standard(未在 RFC 7519 中定义)附加功能。使用 header 中的 kid
字段(key ID 的缩写),客户端可以使用 which key 指定令牌被签署了。在验证时,您可以使用密钥 ID 查找(可能的几个)已知密钥之一(如何以及是否实施此密钥查找取决于您)。
如果您不想使用此功能,请不要使用。只是 return 来自 keyFunc
的静态字节流而不检查令牌 headers:
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
})