Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Golang中验证JWT令牌_Go_Jwt_Jwt Go - Fatal编程技术网

如何在Golang中验证JWT令牌

如何在Golang中验证JWT令牌,go,jwt,jwt-go,Go,Jwt,Jwt Go,我想检查JWT是否由我们的服务器生成 我使用JWT进行身份验证,并使用RS256作为JWT的算法 现在,我想在Golang中编写一个函数来验证JWT令牌是否属于我们。 下面是我已经实现的代码: publicKey = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAxxxxxxf2iF+20xHTZ4jTUBzYmikBuUsm0839T5SDmwEquTB\nfQIDAQAB\n-----END PUBLIC

我想检查JWT是否由我们的服务器生成

我使用JWT进行身份验证,并使用RS256作为JWT的算法

现在,我想在Golang中编写一个函数来验证JWT令牌是否属于我们。 下面是我已经实现的代码:

    publicKey = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAxxxxxxf2iF+20xHTZ4jTUBzYmikBuUsm0839T5SDmwEquTB\nfQIDAQAB\n-----END PUBLIC KEY-----\n"


    // sample token string taken from the New example
    tokenString := this.JWT[0]

    claims := jwt.MapClaims{}
    token, err := jwt.ParseWithClaims(tokenString, &claims, func(token *jwt.Token) (interface{}, error) {
        return []byte(publicKey), nil
    })

    // ... error handling
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("TOKEN is:", token.Valid)

    // do something with decoded claims
    for key, val := range claims {
        fmt.Printf("Key: %v, value: %v\n", key, val)
    }
这就是输出:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvs97nrY4XqXVJT1Y4AU5
xxx
TLWXK2H4swuXSEyV75Ylem+f2iF+20xHTZ4jTUBzYmikBuUsm0839T5SDmwEquTB
fQIDAQAB
-----END PUBLIC KEY-----

key is of invalid type
TOKEN is: false
Key: iss, value: https://example.com
Key: nbf, value: 1.592797834e+09
Key: exp, value: 1.592801434e+09
Key: sub, value: 3
Key: aid, value: 2
Key: fea, value: 0
Key: iat, value: 1.592797834e+09
Key: aud, value: []
Key: jti, value: 7a97a2327e671d2bf01253819fb319d6
我观察到
键的类型无效
标记。有效的
false

有谁能帮我指出错误的代码以及如何修复

Tks提前

[]字节(公钥)
传递到
keyFunc
是错误的

如果是
rsa
(即
RS256
RS512
RS384
),则应返回
*rsa.PublicKey
(有关如何实现
Verfiy()
的更多信息,请参阅)


使用
ExampleParsePKIXPublicKey()
解析和解码字符串公钥,或者如@Dan所述,您可以使用
ParsersPublicKeyFromPEM
(有关详细信息,请参阅)。

从公钥中删除新行字符并尝试使用

publicKey = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAxxxxxxf2iF+20xHTZ4jTUBzYmikBuUsm0839T5SDmwEquTBfQIDAQAB-----END PUBLIC KEY-----"