为了账号安全,请及时绑定邮箱和手机立即绑定

将 JWT 有效负载转换回结构

将 JWT 有效负载转换回结构

Go
慕容3067478 2023-07-17 14:15:45
我在将 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(),        },    }
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

您正在使用 JSON 来编组您的结构:

requestBody, err := json.Marshal(requestParams)`

因此,您应该使用 JSON 解组来获取结构。然而,你习惯于binary.Read()阅读它:

err = binary.Read(bytes.NewReader(payload), binary.LittleEndian, &requestData)

相反,这样做:

err = json.Unmarshal(payload, &requestData)


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信