首頁 > 後端開發 > Golang > 主體

令牌簽名後 JWT 聲明不保留

王林
發布: 2024-02-14 09:40:09
轉載
589 人瀏覽過

令牌签名后 JWT 声明不保留

php小編香蕉在本文中將介紹JWT(JSON Web Token)中的一個重要概念:令牌簽名。 JWT是一種用於在網路應用之間傳遞訊息的安全標準。在JWT中,令牌簽名是一種保護令牌完整性和真實性的機制。一旦令牌被簽名,任何對令牌的篡改或偽造將立即被偵測到。然而,有時候我們可能需要在某些情況下不保留JWT聲明的簽名,本文將詳細解釋如何實現這項需求。

問題內容

我有以下程式碼。我正在使用自訂聲明創建一個 json web 令牌(使用 golang-jwt)。問題是,當我使用密鑰(方法 = hs256)簽署令牌然後解析令牌時,聲明會發生更改。我犯了什麼錯誤。

程式碼:

package main

import (
    "fmt"
    "time"

    "github.com/golang-jwt/jwt/v4"
)

type mycustomclaims struct {
    userid int
    jwt.registeredclaims
}

func (app *config) generatejwt(userid int) {

    //code to generate jwt
    jt := jwt.newwithclaims(jwt.signingmethodhs256, mycustomclaims{
        userid,
        jwt.registeredclaims{
            expiresat: jwt.newnumericdate(time.now().add(3 * time.hour)),
            issuedat:  jwt.newnumericdate(time.now()),
        },
    })

    fmt.println("what was put", jt.claims.(mycustomclaims).userid)
    token, _ := jt.signedstring(app.secret)

    //code to check whether claims are retained
    parsed_token, _ := jwt.parsewithclaims(token, &mycustomclaims{}, func(t *jwt.token) (interface{}, error) {
        return app.secret, nil
    })

    fmt.println("what was parsed", parsed_token.claims.(*mycustomclaims).userid)

}

登入後複製

輸出

What was put 8
What was parsed 0
登入後複製

解決方法

您必須匯出使用者 id 欄位(使其以大寫字母開頭)。未匯出的欄位無法進行 json 編碼。

type MyCustomClaims struct {
    UserID int `json:"userid"`
    jwt.RegisteredClaims
}
登入後複製

以上是令牌簽名後 JWT 聲明不保留的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!