如何在golang中参数化header上的token值授权

问题描述 投票:0回答:1

我是一个新手,试图调用 cyberark 来获取秘密,并试图弄清楚如何参数化令牌值。该值源自在此 API 调用之前发生的另一个其余 API 调用。所以我想传递来自其他 API 调用的响应并作为令牌传递到此处。下面是我的代码;我尝试为从其他 API 调用获得的令牌响应创建一个变量,以便能够在此处使用,但遇到了不同的格式错误,例如字符串错误中的换行符等。

package main

    import (
    "fmt"
    "net/http"
    "io/ioutil"
    )

   func main() {

    url := "https://secrets.com/password"
     method := "GET"

     client := &http.Client {
     }
      req, err := http.NewRequest(method, url, nil)

      if err != nil {
      fmt.Println(err)
      return
     }
      req.Header.Add("Accept-Encoding", "base64")
      req.Header.Add("Authorization", "Token token=\"eyJwcm90ZWN0ZWQiOiJleU\"")
      req.Header.Add("Accept", "application/json")

     res, err := client.Do(req)
      if err != nil {
      fmt.Println(err)
      return
     }
     defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
     if err != nil {
      fmt.Println(err)
      return
     }
    fmt.Println(string(body))
   }
json go https cyber-ark
1个回答
0
投票

创建一个包含先前 API 调用的令牌的结构对象,然后对其进行解组并将该对象作为参数传递给此函数..

type ResponsePayload struct {
    Token string
}

... // Inside the other API call

var payload ResponsePayload

json.NewDecoder(otherAPIResp.Body).Decode(&payload)

在这个 API 调用中

   client := &http.Client {}

   req, err := http.NewRequest(method, url, nil)
   if err != nil {
       fmt.Println(err)
       return
   }

   tokenStr := fmt.Sprintf("Token token=\"%s\"", payload.Token) // Format token with string formatter.

   req.Header.Add("Accept-Encoding", "base64")
   req.Header.Add("Authorization", tokenStr)
   req.Header.Add("Accept", "application/json")

   res, err := client.Do(req)
   if err != nil {
       fmt.Println(err)
       return
   }
   defer res.Body.Close()

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.