首頁  >  文章  >  後端開發  >  如何從 go 中的 jwt 令牌取得過期日期?

如何從 go 中的 jwt 令牌取得過期日期?

PHPz
PHPz轉載
2024-02-14 12:20:09961瀏覽

如何从 go 中的 jwt 令牌获取过期日期?

在 Go 語言中,JWT 令牌是一種常見的身份驗證機制。要從 JWT 令牌中取得過期日期,我們可以使用第三方函式庫 "github.com/dgrijalva/jwt-go" 來解析令牌的有效載荷。首先,我們需要將令牌字串解析為 jwt.Token 對象,然後可以透過存取 Token.Claims["exp"] 欄位來取得過期日期。此欄位的值是 Unix 時間戳,可以使用 time.Unix 函數將其轉換為時間類型。透過這種方式,我們可以輕鬆地取得 JWT 令牌的過期日期。

問題內容

我有一個 jwt 令牌,我可以在 https://jwt.io/ 網站上看到解碼後的令牌。它不需要我設定任何秘密或聲明。所以我正在尋找一種方法來解碼令牌以獲得過期日期而不提供任何秘密。

我正在使用函式庫 ngopkg.in/square/go-jose.v2/jwt ,以下是我的程式碼:

token, err := jwt.ParseSigned(jwtToken)

回傳值 token 有一個標頭字段,其中包括 keyid、演算法,但它沒有給我過期日期。

我搜尋過這個主題,人們說使用 github.com/auth0/go-jwt-middleware/v2/validator 庫,但它需要設定金鑰/秘密。解析令牌的過期日期是否需要秘密。 網站https://jwt.io/如何知道過期日期?

解決方法

使用 jwt.io 中的範例 jwt 令牌,此程式碼解析並擷取未經驗證簽署的宣告:

func main() {
    raw := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

    t, err := jwt.ParseSigned(raw)
    if err != nil {
        panic(err)
    }

    var claims map[string]any
    if err := t.UnsafeClaimsWithoutVerification(&claims); err != nil {
        panic(err)
    }

    fmt.Println(claims)
}

在此範例中,過期時間應顯示為 claims 對應中的欄位之一。要檢索它,請使用 exp, ok := claims["expire"] (取決於確切的名稱)。

以上是如何從 go 中的 jwt 令牌取得過期日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除