在Go語(yǔ)言中,使用JWT(JSON Web Token)的一般步驟如下:
安裝相關(guān)依賴包。
go get github.com/dgrijalva/jwt-go
導(dǎo)入相關(guān)包。
import (
"github.com/dgrijalva/jwt-go"
)
創(chuàng)建一個(gè)JWT。
func CreateJWT(secretKey []byte, claims jwt.MapClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString(secretKey)
}
解析和驗(yàn)證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")
// 創(chuàng)建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)
// 解析和驗(yàn)證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)
}
這是一個(gè)簡(jiǎn)單的JWT使用示例,你可以根據(jù)自己的需要進(jìn)行修改和擴(kuò)展。注意要保護(hù)好密鑰,以確保JWT的安全性。