110 lines
2.5 KiB
Go
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 不一致")
|
|
}
|
|
}
|