我在将 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(),
},
}
白猪掌柜的
相关分类