将 JWT 有效负载转换回结构

我在将 JWT 有效负载转换回 golang 中的结构时遇到问题


我有两台相互通信的服务器,并有 JWT 身份验证来加强安全性。


有效负载使用以下结构


type ResponseBody struct {

    Header       dto.MessageHeader       `json:"message_header"`

    OrderBodyParams dto.OrderBodyParams `json:"order_response"`

    Status              string                  `json:"status"`

    ErrorMessage        string                  `json:"errors"`

}

服务器 A 获取此结构 - 将其转换为字节日期并将其作为 JWT 有效负载发送


相关代码如下


func request(secretKey string, path string, method string, requestParams interface{}, response interface{}) error {


    tr := &http.Transport{

        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},

    }

    client := &http.Client{

        Timeout:   time.Second * 15,

        Transport: tr,

    }


    //convert body into byte data

    requestBody, err := json.Marshal(requestParams)

    if err != nil {

        return err

    }


    tokenString, expirationTime, err := authentication.GenerateJWTAuthToken(secretKey, requestBody)

    if err != nil {

      return err

    }


    req, _ := http.NewRequest(method, path, bytes.NewBuffer([]byte(tokenString)))

    req.Header.Set("Content-Type", "application/json")

    req.AddCookie(&http.Cookie{

        Name:    "token",

        Value:   tokenString,

        Expires: expirationTime,

    })


    _, err = client.Do(req)


    if err != nil {

       return err

    }


    return nil

}

正如您所看到的,我只是将正文转换为字节数据 - 并将其转换为 JWT 有效负载


函数GenerateJWTAuthToken如下所示


type Claims struct {

    Payload []byte `json:"payload"`

    jwt.StandardClaims

}



func GenerateJWTAuthToken(secretKey string, payload []byte) (string, time.Time, error) {

    var jwtKey = []byte(secretKey)


    // Set expiration to 5 minutes from now (Maybe lesser?)

    expirationTime := time.Now().Add(5 * time.Minute)

    // create the payload

    claims := &Claims{

        Payload: payload,

        StandardClaims: jwt.StandardClaims{

            ExpiresAt: expirationTime.Unix(),

        },

    }



慕容3067478
浏览 112回答 1
1回答

白猪掌柜的

您正在使用 JSON 来编组您的结构:requestBody, err := json.Marshal(requestParams)`因此,您应该使用 JSON 解组来获取结构。然而,你习惯于binary.Read()阅读它:err = binary.Read(bytes.NewReader(payload), binary.LittleEndian, &requestData)相反,这样做:err = json.Unmarshal(payload, &requestData)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go