修复 jwt payload解析的错误

This commit is contained in:
eson
2023-08-25 15:37:35 +08:00
parent ede181d6dd
commit f91f9d3230
21 changed files with 263 additions and 109 deletions

View File

@@ -5,14 +5,17 @@ import (
"encoding/json"
"errors"
"fmt"
"log"
"net/http"
"strings"
)
var DefaultJwtSecret uint64 = 21321321321
func ParseJwtTokenHeader[T any](r *http.Request) (string, *T, error) {
//TODO:
var u T
return "", &u, nil
// var u T
// return "", &u, nil
AuthKey := r.Header.Get("Authorization")
if AuthKey == "" {
@@ -28,7 +31,51 @@ func ParseJwtTokenHeader[T any](r *http.Request) (string, *T, error) {
return "", nil, fmt.Errorf("Invalid JWT token")
}
payload, err := base64.URLEncoding.DecodeString(parts[1])
payload, err := base64.RawURLEncoding.DecodeString(parts[1])
if err != nil {
return "", nil, fmt.Errorf("Error unmarshalling JWT DecodeString: %s", err.Error())
}
var p T
err = json.Unmarshal(payload, &p)
if err != nil {
return "", nil, fmt.Errorf("Error unmarshalling JWT payload: %s", err)
}
return AuthKey, &p, nil
// token, err := jwt.Parse(AuthKey, func(token *jwt.Token) (interface{}, error) {
// // 检查签名方法是否为 HS256
// if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
// return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
// }
// // 返回用于验证签名的密钥
// return []byte(svcCtx.Config.Auth.AccessSecret), nil
// })
// if err != nil {
// return nil, errors.New(fmt.Sprint("Error parsing token:", err))
// }
// // 验证成功返回
// if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
// return claims, nil
// }
// return nil, errors.New(fmt.Sprint("Invalid token", err))
}
func TParseJwtTokenHeader[T any](AuthKey string) (string, *T, error) {
//TODO:
// var u T
// return "", &u, nil
parts := strings.Split(AuthKey, ".")
if len(parts) != 3 {
return "", nil, fmt.Errorf("Invalid JWT token")
}
payload, err := base64.RawURLEncoding.DecodeString(parts[1])
log.Println(string(payload))
if err != nil {
return "", nil, fmt.Errorf("Error unmarshalling JWT DecodeString: %s", err.Error())
}

View File

@@ -20,6 +20,7 @@ type RegisterToken struct {
Email string // email
Password string // 密码
Platform string // 平台
TraceId string //链路Id
CreateAt time.Time // 创建时间
}
@@ -29,6 +30,7 @@ type ResetToken struct {
Wid string // websocket 通道id
Email string // email
OldPassword string // 旧密码
TraceId string //链路Id
CreateAt time.Time // 创建时间
}

View File

@@ -216,7 +216,7 @@ func getJwtClaims(AuthKey string, AccessSecret *string) (jwt.MapClaims, error) {
func PasswordHash(pwd string) string {
h := sha256.New()
h.Write([]byte(pwd))
return base64.URLEncoding.EncodeToString(h.Sum(nil))
return base64.RawURLEncoding.EncodeToString(h.Sum(nil))
}
func CheckValueRange[T comparable](v T, rangevalues ...T) bool {

View File

@@ -60,10 +60,10 @@ func TestCase1(t *testing.T) {
a := sha256.New()
a.Write([]byte("fusen_backend_3021"))
base64.URLEncoding.EncodeToString(a.Sum(nil))
base64.RawURLEncoding.EncodeToString(a.Sum(nil))
as := fmt.Sprintf("%x", a.Sum(nil))
log.Println(as, len(as), base64.URLEncoding.EncodeToString(a.Sum(nil)))
log.Println(as, len(as), base64.RawURLEncoding.EncodeToString(a.Sum(nil)))
// b := sha256.New().Sum([]byte("fusen_backend_2022"))
// bs := fmt.Sprintf("%x", b)