当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用jwt-go库验证JSONWeb令牌?》经验,为你挑选了1个好方法。

我在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> helmbert..:

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
})

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有