我在将 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)
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消