【问题标题】:How to verify a JSON Web Token with the jwt-go library?如何使用 jwt-go 库验证 JSON Web Token?
【发布时间】:2016-04-07 07:24:30
【问题描述】:

我在 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 总是错误的。 这是一个错误吗?如何验证令牌是否有效?

【问题讨论】:

    标签: go jwt jwt-go


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-23
      • 2014-07-11
      • 2015-09-23
      • 2016-11-24
      • 2018-02-12
      • 2023-04-05
      • 2020-03-17
      • 1970-01-01
      相关资源
      最近更新 更多