在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的安全性。