code: func (cpc *CachePurgeClient) constructAuthHeader(body []byte, apiPath string, nonce string) (string, error) {
  	// The akamai API is very time sensitive (recommending reliance on a stratum 2
  	// or better time source) and, although it doesn't say it anywhere, really wants
  	// the timestamp to be in the UTC timezone for some reason.
  	timestamp := cpc.clk.Now().UTC().Format(timestampFormat)
  	header := fmt.Sprintf(
  		"EG1-HMAC-SHA256 client_token=%s;access_token=%s;timestamp=%s;nonce=%s;",
  		cpc.clientToken,
  		cpc.accessToken,
  		timestamp,
  		nonce,
  	)
  	bodyHash := sha256.Sum256(body)
  	tbs := fmt.Sprintf(
  		"%s\t%s\t%s\t%s\t%s\t%s\t%s",
  		"POST",
  		cpc.apiScheme,
  		cpc.apiHost,
  		apiPath,
  		"", // We don't need to send any signed headers for a purge so this can be blank
  		base64.StdEncoding.EncodeToString(bodyHash[:]),
  		header,
  	)
  
  	cpc.log.Debugf("To-be-signed Akamai EdgeGrid authentication: %q", tbs)
  
  	h := hmac.New(sha256.New, signingKey(cpc.clientSecret, timestamp))
  	h.Write([]byte(tbs))
  	return fmt.Sprintf(
  		"%ssignature=%s",
  		header,
  		base64.StdEncoding.EncodeToString(h.Sum(nil)),
  	), nil
  }
docs: // Akamai uses a special authorization header to identify clients to their EdgeGrid
  // APIs, their docs (https://developer.akamai.com/introduction/Client_Auth.html)
  // provide a  description of the required generation process.