我在將 JWT 有效負(fù)載轉(zhuǎn)換回 golang 中的結(jié)構(gòu)時(shí)遇到問題我有兩臺(tái)相互通信的服務(wù)器,并有 JWT 身份驗(yàn)證來加強(qiáng)安全性。有效負(fù)載使用以下結(jié)構(gòu)type ResponseBody struct { Header dto.MessageHeader `json:"message_header"` OrderBodyParams dto.OrderBodyParams `json:"order_response"` Status string `json:"status"` ErrorMessage string `json:"errors"`}服務(wù)器 A 獲取此結(jié)構(gòu) - 將其轉(zhuǎn)換為字節(jié)日期并將其作為 JWT 有效負(fù)載發(fā)送相關(guān)代碼如下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}正如您所看到的,我只是將正文轉(zhuǎn)換為字節(jié)數(shù)據(jù) - 并將其轉(zhuǎn)換為 JWT 有效負(fù)載函數(shù)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貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
您正在使用 JSON 來編組您的結(jié)構(gòu):
requestBody, err := json.Marshal(requestParams)`
因此,您應(yīng)該使用 JSON 解組來獲取結(jié)構(gòu)。然而,你習(xí)慣于binary.Read()
閱讀它:
err = binary.Read(bytes.NewReader(payload), binary.LittleEndian, &requestData)
相反,這樣做:
err = json.Unmarshal(payload, &requestData)
- 1 回答
- 0 關(guān)注
- 143 瀏覽
添加回答
舉報(bào)
0/150
提交
取消