无法在 Chargify REST API 上进行身份验证

Posted

技术标签:

【中文标题】无法在 Chargify REST API 上进行身份验证【英文标题】:Unable to authenticate on Chargify REST API 【发布时间】:2016-04-18 20:59:50 【问题描述】:

我尝试对 Chargify API 上的简单 GET 请求进行身份验证。我可能缺少有关如何将凭据传递给服务的详细信息。

我收到以下错误:

“底层连接已关闭:发生意外错误 发送。”

"验证失败,因为远程方已经关闭了 传输流。”

我使用的代码如下:

const string url = "https://subdomain.chargify.com/subscriptions.json";
var request = (HttpWebRequest)WebRequest.Create(url);

string auth = Convert.ToBase64String(Encoding.ASCII.GetBytes("apikey:x"));
request.Headers[HttpRequestHeader.Authorization] = "Basic " + auth;

WebResponse response = request.GetResponse(); //THROW ERROR

using (Stream responseStream = response.GetResponseStream())

    var reader = new StreamReader(responseStream, Encoding.UTF8);
    return reader.ReadToEnd();

我正在按照 Chargify API 文档中的说明进行操作,您可以在此处查阅信息:

https://docs.chargify.com/api-authentication

https://docs.chargify.com/api-introduction

使用 chrome 扩展“高级 REST 客户端”,我使用上面的 url 执行 GET 请求,然后 chrome 在其传统弹出窗口中请求凭据,我将我的 api 密钥和“x”作为密码,然后我得到一个在 json 中回答我所期望的。所以我知道 api 密钥是正确的,我缺少的是如何通过请求传递 C# 中的信息。

在文档中使用 curl,他们给出了这个例子:

 curl -u api-key:x https://subdomain.chargify.com/customers.xml

你有什么想法,curl中的这个-u参数应该如何用C#翻译?

谢谢!

编辑 正如评论中所建议的,我尝试使用 .NET 包装器,但我得到了确切的错误。这是我的代码示例:

var _apiConnection = new ChargifyConnect(url, _userName, _password);
var productList = _apiConnection.GetProductList();

【问题讨论】:

在Documentation下勾选docs.chargify.com/api-code 我做到了,使用 .NET 包装器我得到了同样的错误。我刚刚在这个问题中使用这个包装器添加了代码示例。 @jmecwel 查看我对下面包装器的评论 【参考方案1】:

由于连接刚刚关闭而没有回复,这可能与本周生效的 TLS 1.2 要求有关。

https://docs.chargify.com/tls-upgrade-notice

【讨论】:

太棒了!事实上,在创建我的请求之前添加以下内容是可行的:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 您实际上可以将ChargifyConnect 上的ProtocolType 属性设置为相同的值-SecurityProtocolType.Tls12。它做同样的事情,它只是在实际打开连接之前调用它,所以它没有地方可以切换回来。 @djbyter 谢谢,很高兴知道我可以使用包装器,它可以节省很多工作!【参考方案2】:

我通过将 TLS 版本显式设置为 1.2 来解决此问题。只需在调用 Chargify 之前添加此代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

【讨论】:

以上是关于无法在 Chargify REST API 上进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 rest-client 文件上传在 Yandex 上进行 Ruby 反向图像搜索

如何启用解析服务器rest api

使用Javascript的WooCommerce Rest API Oauth

Laravel Rest API Google Auth 在 Angular

无法使用 Clover POS REST API 添加带有修饰符的单个行项目

使用 React 应用程序调用 REST API 时出错