在Go語言中,使用JWT(JSON Web Token)的一般步驟如下:
安裝相關依賴包。
go get github.com/dgrijalva/jwt-go
導入相關包。
import (
"github.com/dgrijalva/jwt-go"
)
創建一個JWT。
func CreateJWT(secretKey []byte, claims jwt.MapClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString(secretKey)
}
解析和驗證JWT。
func ParseAndVerifyJWT(tokenString string, secretKey []byte) (*jwt.Token, error) {
return jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return secretKey, nil
})
}
獲取JWT中的claims。
func GetClaims(token *jwt.Token) jwt.MapClaims {
return token.Claims.(jwt.MapClaims)
}
示例代碼:
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
)
func main() {
secretKey := []byte("my_secret_key")
// 創建JWT
claims := jwt.MapClaims{
"username": "john_doe",
"exp": jwt.NewNumericDate(1000000000),
}
tokenString, err := CreateJWT(secretKey, claims)
if err != nil {
fmt.Println("Failed to create JWT:", err)
return
}
fmt.Println("JWT:", tokenString)
// 解析和驗證JWT
token, err := ParseAndVerifyJWT(tokenString, secretKey)
if err != nil {
fmt.Println("Failed to parse and verify JWT:", err)
return
}
// 獲取JWT中的claims
claims = GetClaims(token)
fmt.Println("Claims:", claims)
}
func CreateJWT(secretKey []byte, claims jwt.MapClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString(secretKey)
}
func ParseAndVerifyJWT(tokenString string, secretKey []byte) (*jwt.Token, error) {
return jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return secretKey, nil
})
}
func GetClaims(token *jwt.Token) jwt.MapClaims {
return token.Claims.(jwt.MapClaims)
}
這是一個簡單的JWT使用示例,你可以根據自己的需要進行修改和擴展。注意要保護好密鑰,以確保JWT的安全性。