为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁星点点滴滴 2021-12-06 16:56:43
我在 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总是假的。这是一个错误吗?如何验证令牌是否有效?
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

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


文档中的示例显示了jwt-go 库提供的非标准(未在RFC 7519 中定义)附加功能。使用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

})


查看完整回答
反对 回复 2021-12-06
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信