使用 github.com/golang-jwt/jwt/v5
包創(chuàng)建和解析驗證 JSON Web Token (JWT) 主要涉及以下幾個步驟:創(chuàng)建一個新的 JWT藕筋,簽署它,并且驗證和解析一個已經(jīng)簽署的 JWT。
1. 安裝依賴
首先扫茅,確保你已經(jīng)安裝了 github.com/golang-jwt/jwt/v5
包姊氓。你可以使用以下命令安裝:
go get github.com/golang-jwt/jwt/v5
2. 創(chuàng)建一個 JWT Token
以下是創(chuàng)建并簽署一個 JWT Token 的示例:
package main
import (
"fmt"
"time"
"github.com/golang-jwt/jwt/v5"
)
func main() {
// 定義簽名方法
signingKey := []byte("your-256-bit-secret")
// 創(chuàng)建 token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"sub": "1234567890", // 用戶ID
"name": "John Doe", // 用戶名
"iat": time.Now().Unix(), // 簽發(fā)時間
"exp": time.Now().Add(time.Hour * 2).Unix(), // 過期時間 (2小時后)
})
// 使用簽名方法和密鑰簽署 token
tokenString, err := token.SignedString(signingKey)
if err != nil {
fmt.Println("Error signing token:", err)
return
}
fmt.Println("Generated Token:", tokenString)
}
3. 解析和驗證 JWT Token
解析和驗證 JWT Token 的代碼如下:
package main
import (
"fmt"
"github.com/golang-jwt/jwt/v5"
)
func main() {
// 定義簽名密鑰
signingKey := []byte("your-256-bit-secret")
// 示例 Token
tokenString := "your.jwt.token.here"
// 解析 token
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
// 確保 token 使用了預(yù)期的簽名方法
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
}
return signingKey, nil
})
if err != nil {
fmt.Println("Error parsing token:", err)
return
}
// 驗證 token
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
fmt.Println("Token is valid.")
fmt.Println("User ID:", claims["sub"])
fmt.Println("User Name:", claims["name"])
fmt.Println("Issued At:", time.Unix(int64(claims["iat"].(float64)), 0))
fmt.Println("Expires At:", time.Unix(int64(claims["exp"].(float64)), 0))
} else {
fmt.Println("Invalid token.")
}
}
4. 運行程序
確保在你的環(huán)境中替換 signingKey
和 tokenString
為實際使用的值停巷。
重要注意事項
-
密鑰管理: 在生產(chǎn)環(huán)境中备畦,簽名密鑰(
signingKey
)應(yīng)該安全地存儲计盒,不能硬編碼在代碼中射窒。 -
有效期: 注意 JWT 的有效期(
exp
)藏杖,它決定了 token 的有效時間。確保你的應(yīng)用程序正確處理 token 的過期情況脉顿。 - 錯誤處理: 在實際應(yīng)用中蝌麸,應(yīng)該有完善的錯誤處理機制,以應(yīng)對可能的 token 解析和驗證失敗的情況艾疟。
這段代碼可以用來生成和驗證基于 HMAC 的 JWT来吩。在實際使用時,根據(jù)需求可能還需要定制化 Claims 結(jié)構(gòu)或者使用其他的簽名方法汉柒。