mylomen-server/common/xjwt/jwt_test.go
shaoyongjun adfc73df29 to:sync
2024-09-30 22:49:21 +08:00

110 lines
2.5 KiB
Go

package xjwt
import (
"fmt"
"github.com/golang-jwt/jwt/v5"
"mylomen_server/common/dto"
"testing"
"time"
)
func TestGenAndParse(t *testing.T) {
mySigningKey := []byte("AllYourBase")
claims := dto.LoginTokenVo{
Sn: "mySn",
Token: "myToken",
RegisteredClaims: jwt.RegisteredClaims{
Audience: []string{"mylomen.com"},
ExpiresAt: jwt.NewNumericDate(time.Now().Add(1 * time.Hour)),
IssuedAt: jwt.NewNumericDate(time.Now()),
Issuer: "mylomen.com",
NotBefore: jwt.NewNumericDate(time.Now()),
Subject: "1",
},
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
ss, err := token.SignedString(mySigningKey)
fmt.Println(ss, err)
parseToken, err := jwt.ParseWithClaims(ss, &dto.LoginTokenVo{}, func(token *jwt.Token) (interface{}, error) {
return mySigningKey, nil
})
if userClaims, ok := parseToken.Claims.(*dto.LoginTokenVo); ok && parseToken.Valid {
t.Log(userClaims, userClaims.RegisteredClaims.Issuer)
} else {
fmt.Println(err)
t.Error("验证失败")
}
}
func TestHs256(t *testing.T) {
type User struct {
Id int64
Name string
}
type UserClaims struct {
User User
jwt.RegisteredClaims
}
// 1 jwt.NewWithClaims生成token
user := User{
Id: 101,
Name: "hisheng",
}
userClaims := UserClaims{
User: user,
RegisteredClaims: jwt.RegisteredClaims{},
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, userClaims)
// 2 把token加密
mySigningKey := []byte("ushjlwmwnwht")
ss, err := token.SignedString(mySigningKey)
t.Log(ss, err)
}
func TestHs256Parse(t *testing.T) {
tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VyIjp7IklkIjoxMDEsIk5hbWUiOiJoaXNoZW5nIn19.ij1kWID03f_CiELe0fPLZJ-Y64dkf2nDE-f6nGERBSE"
type User struct {
Id int64
Name string
}
type UserClaims struct {
User User
jwt.RegisteredClaims
}
token, err := jwt.ParseWithClaims(tokenString, &UserClaims{}, func(token *jwt.Token) (interface{}, error) {
return []byte("ushjlwmwnwht"), nil
})
if userClaims, ok := token.Claims.(*UserClaims); ok && token.Valid {
t.Log(userClaims, userClaims.RegisteredClaims.Issuer)
} else {
t.Log(err)
}
}
func TestGenJwtTokenThenParse(t *testing.T) {
claims := dto.LoginTokenVo{}
claims.Sn = "mySn"
claims.Token = "myToken"
claims.RegisteredClaims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(24 * time.Hour))
jwtToken := GenJwtToken(claims)
//parse
data, err := ParseJwtToken(jwtToken)
if err != nil {
t.Error(err)
return
}
if data.Sn != claims.Sn {
t.Error("Sn 不一致")
}
}