使用 jwt-go 库 - 密钥无效或类型无效

Posted

技术标签:

【中文标题】使用 jwt-go 库 - 密钥无效或类型无效【英文标题】:Using jwt-go Library - Key is invalid or invalid type 【发布时间】:2015-03-28 01:39:31 【问题描述】:

我正在尝试将令牌传递给此 GO 库 (http://godoc.org/github.com/dgrijalva/jwt-go) 中定义的“Parse(token String, keyFunc Keyfunc)”GO 例程,用于 JWT 令牌解析/验证。

当我将令牌传递给这个函数时 -

token, err := jwt.Parse(getToken, func(token *jwt.Token) (interface, error) 
        return config.Config.Key, nil
    )

我收到一条错误消息,提示“密钥无效或类型无效”。

我的配置结构在 config.go 文件中看起来像这样 -

config struct 
 Key string

有解决这个问题的建议吗?我传递的令牌是 JWT 令牌。

【问题讨论】:

【参考方案1】:
config struct 
 Key string

Key 必须是 []byte

【讨论】:

虽然此代码示例可能会回答这个问题,但最好在您的回答中包含一些基本解释。就目前而言,这个答案对未来的读者几乎没有价值。【参考方案2】:

其他方法是做这样的事情-

token, err := jwt.Parse(getToken, func(token *jwt.Token) (interface, error) 
        return []byte(config.Config.Key), nil
    )

整个想法是 Parse 函数返回一个字节切片。

【讨论】:

【参考方案3】:

我不确定这是否会成为其他人的问题。

我的问题是我使用签名方法"SigningMethodES256",但"SigningMethodHS256" 或任何SigningMethodHS* 工作正常。

如果有人知道为什么这是一个问题,请回答。

【讨论】:

【参考方案4】:

看看我们看到的GoDoc for github.com/dgrijalva/jwt-go中的函数签名:

func Parse(tokenString string, keyFunc Keyfunc) (*Token, error)

type Keyfunc func(*Token) (interface, error)

Keyfunc 要求您返回(interface, error)。鉴于神秘的interface 类型,您可能期望返回string 会很好;然而,窥探一下,Parse() 会尝试Verify(),它会尝试以下类型断言,并将您的interface 值作为key

keyBytes, ok := key.([]byte)

[]byte 类型会成功,但string 类型会失败。如果失败,结果就是您收到的错误消息。阅读有关 type assertions in the Effective Go documentation 的更多信息,了解它失败的原因。

例如:https://play.golang.org/p/9KKNFLLQrm

package main

import "fmt"

func main() 
    var a interface
    var b interface

    a = []byte("hello")
    b = "hello"

    key, ok := a.([]byte)
    if !ok 
        fmt.Println("a is an invalid type")
     else 
        fmt.Println(key)
    

    key, ok = b.([]byte)
    if !ok 
        fmt.Println("b is an invalid type")
     else 
        fmt.Println(key)
    


[104 101 108 108 111]
b is an invalid type

【讨论】:

以上是关于使用 jwt-go 库 - 密钥无效或类型无效的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 9 无效的密钥库密码

使用多个(最新)第 3 方反应库反应“未捕获的不变违规:元素类型无效”

Java:通过代码生成时,密钥库格式无效

jwt-go库介绍

vs2015添加或删除文件时提示名称无效

Cordova facebook 插件无效的密钥哈希