如何在 Golang 中验证 JWT 令牌

我想检查我们的服务器是否生成了 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

我观察到key is of invalid type并且token.valid是false。


谁能帮我指出错误的代码以及如何解决这个问题?


Helenr
浏览 165回答 2
2回答

一只萌萌小番薯

传递[]byte(publicKey)给keyFunc是错误的。在rsa(ie RS256, RS512or RS384) 的情况下,您应该返回 a (有关如何实现的更多信息,*rsa.PublicKey请参阅此Verfiy()内容)。ExampleParsePKIXPublicKey() 在此处使用来解析和解码您的字符串公钥或如@Dan 所述,您可以使用ParseRSAPublicKeyFromPEM(有关更多信息,请参阅此内容)。

慕神8447489

从公钥中删除换行符并尝试一下。publicKey = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAxxxxxxf2iF+20xHTZ4jTUBzYmikBuUsm0839T5SDmwEquTBfQIDAQAB-----END PUBLIC KEY-----"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go