我正在尝试使用以下API https://api.coinbase.com/
列出我的coinbase帐户。
我使用了以下路径GET https://api.coinbase.com/v2/accounts
。
我系统地拒绝了“未经授权(401)错误”
下面我做了一些重要的检查:
/v2/time
这样的特定授权级别https://api.pro.coinbase.com/
上的余额有什么想法吗?
HttpClient _httpClient
var timeStamp = GetSecondsSinceEpoch();
var signature = ComputeSignature($"{timeStamp}GET/v2/accounts", privateKey);
_httpClient.DefaultRequestHeaders.Add("User-Agent", "MyAppClient");
_httpClient.DefaultRequestHeaders.Add("CB-ACCESS-KEY", publicKey);
_httpClient.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", signature);
_httpClient.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", timeStamp);
private static string ComputeSignature(string preHashString, string privateKey)
{
try
{
using (var hmac = new HMACSHA256(Convert.FromBase64String(privateKey)))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(preHashString));
return Convert.ToBase64String(hash);
}
}
catch (Exception)
{
//
}
return string.Empty;
}
var response = await _httpClient.DefaultRequestHeaders.GetAsync(new Uri("https://api.coinbase.com/v2/accounts"));
response.EnsureSuccessStatusCode();
var jsonString = await response.Content.ReadAsStringAsync();
编辑
实际上,为了访问GET https://api.coinbase.com/v2/accounts
,似乎我们应该使用OAuth授权而不是API KEY,因此它采用的形式是:
_httpClient.DefaultRequestHeaders.Authorization
= new AuthenticationHeaderValue("Bearer","MyAccessToken")
一旦通过我的Coinbase主帐户创建了Oauth访问权限,我就成功地使用Invoke-WebRequest
命令检索了我的帐户信息,但是仍然获得了与CSharp代码等效的Unauthorized (401) error