在 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"]
(取決于確切的名稱)。