微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

coinbase api 总是 401 未经授权

如何解决coinbase api 总是 401 未经授权

自从按照建议生成 api 密钥以来,我已经忠实地等待了 48 多个小时,无论我做什么,每个 coinbase api 调用都会给出 401 Unauthorized

  • 我已经检查了基本的非身份验证所需的调用,例如 /time 和 /exchange_rates,它们工作正常
  • 我使用的是 coinbase 而不是 coinbase pro,所以这是一个简单的基于 API 密钥和标头的调用
  • 三重检查了哈希和解码要求,没有任何明显的问题

与其要求从标准示例中解决编码问题,不如要求是

  1. 现在有人知道 coinbase 服务的一般授权问题吗? (coinbase 没有发布任何内容
  2. 除了通用代码示例和文档之外,还有什么需要做才能让这该死的东西获得授权吗?

任何和所有帮助表示赞赏。 使用的参考资料: https://developers.coinbase.com/docs/wallet/api-key-authentication#

在此处添加了用于完整性的基本代码

// Remove insecure protocols (SSL3,TLS 1.0,TLS 1.1)
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Tls;
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Tls11;
// Add TLS 1.2
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

HttpClient client = new HttpClient();   
string sTimeStamp = Convert.ToInt64(DateTime.Now.Ticks).ToString("F0",CultureInfo.InvariantCulture);
client.BaseAddress = new Uri(sUrl + sOperation);

var convertedString = Convert.FromBase64String(sAPI_EXCHANGE_SECRET);
var prehash = sTimeStamp + "GET" + sOperation + "";   // no content for Now
string sSignature =  HashString(prehash,convertedString);


// bunch of headers for coinbase
// Add an Accept header for JSON format.
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("User-Agent","CryptoAppClient");  // arbitrary user agent name
client.DefaultRequestHeaders.Add("CB-ACCESS-KEY",sAPI_EXCHANGE_KEY);
client.DefaultRequestHeaders.Add("CB-VERSION",sAPI_EXCHANGE_VERSION);
client.DefaultRequestHeaders.Add("CB-ACCESS-SIGN",sSignature);
client.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP",sTimeStamp);


// set up the actual call
HttpResponseMessage response = client.GetAsync("").Result;  
.....

//----------------------------------------------------------------------------
private string HashString(string str,byte[] secret)
{
    var bytes = System.Text.Encoding.UTF8.GetBytes(str);
     using (var hmaccsha = new HMACSHA256(secret))
     {
        return Convert.ToBase64String(hmaccsha.ComputeHash(bytes));
      }
}

解决方法

最后把它排序,结合错误的时间戳值和正确的.net函数来加密消息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。