package auth import ( "encoding/base64" "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 AuthKey := r.Header.Get("Authorization") if AuthKey == "" { return "", nil, nil } if len(AuthKey) <= 15 { return "", nil, errors.New(fmt.Sprint("Error parsing token, len:", len(AuthKey))) } AuthKey = AuthKey[7:] parts := strings.Split(AuthKey, ".") if len(parts) != 3 { return "", nil, fmt.Errorf("Invalid JWT token") } 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()) } 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)) }