C# Coinbase Pro API 如何解决响应问题。 401

C# Coinbase Pro API How to Trouble Shoot Responses. 401

我一直收到来自 coinbase pro 的 401 响应,我仔细检查了我的密码和 api 密钥,它们是正确的。有没有其他原因我会得到 Unauth 响应


            var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString("F0", CultureInfo.InvariantCulture);
            var method = "GET";
            var requestPath = "/accounts";
            var body = "";
            var data = timestamp + method + requestPath + body;
            var secret = "***";

            var signedMessage = GetHMACInHex(secret, data);

            var client = new HttpClient()
            {
                BaseAddress = new Uri("https://api.pro.coinbase.com")
            };

            client.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signedMessage);
            client.DefaultRequestHeaders.Add("CB-ACCESS-KEY", "***");
            client.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timestamp);
            client.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", "***");
            client.DefaultRequestHeaders.Add("User-Agent", "CoinbaseProClient");

这就是我签署数据的方式

static string GetHMACInHex(string key, string data)
        {
            var decoded = Convert.FromBase64String(key);
            var dataBytes = Encoding.UTF8.GetBytes(data);


            using (var hmac = new HMACSHA256(decoded))
            {
                
                var hash = hmac.ComputeHash(dataBytes);
                return Convert.ToBase64String(hash);
            }
        }

401 status code 当以下资源验证在 POST 或 PUT 请求上失败时由 Coinbase 返回:

  • authentication_error- 无效授权(通用)
  • invalid_token- 无效的 Oauth 令牌
  • revoked_token- 已撤销 Oauth 令牌
  • expired_token- 过期的 Oauth 令牌

如果您的问题没有在这里列出,您可能会错过通过 DefaultRequestHeaders

client.DefaultRequestHeaders
      .Accept
      .Add(new MediaTypeWithQualityHeaderValue("application/json"));