簡體   English   中英

如何在 Golang 中驗證 JWT 令牌

[英]How to validate a JWT token in Golang

我想檢查我們的服務器是否生成了 JWT?

我使用 JWT 進行身份驗證並將 RS256 用作我們的 JWT 的算法

現在,我想用 Golang 編寫一個 function 來驗證 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)
    }

這是 output:

-----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.validfalse

誰能幫我指出錯誤的代碼以及如何解決這個問題?

提前謝謝!!!

[]byte(publicKey)傳遞給keyFunc錯誤的。

對於rsa (即RS256RS512RS384 ),您應該返回一個*rsa.PublicKey (有關如何實現 Verfiy Verfiy()的更多信息,請參閱內容)。

在此處使用ExampleParsePKIXPublicKey()來解析和解碼您的字符串公鑰,或者如@Dan 所述,您可以使用ParseRSAPublicKeyFromPEM (有關更多信息,請參閱內容)。

從公鑰中刪除換行符並嘗試一下。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM