【问题标题】:How to use Microsoft.Rest.ServiceClient<> with client certificate?如何将 Microsoft.Rest.ServiceClient<> 与客户端证书一起使用?
【发布时间】:2019-06-20 15:45:13
【问题描述】:

上下文

我有一个经过测试的工作 Web API 服务,它被配置为客户端证书身份验证。现在我想调用它并提供一个客户端证书。我想使用Microsoft.Rest.ServiceClient&lt;&gt;,因为我使用 Visual Studio 2015 "Add"/"REST Api client..." 生成了我的类型化客户端类

注意:我必须从文件或其他流中加载我的 X 509 客户端证书,因为客户端将在 PaaS 环境中运行,因此我无法访问任何操作系统提供的证书存储。

X509Certificate certificate = new X509Certificate(path, password);

问题

对于较低的抽象级别,我知道如何将客户端证书添加到请求中:

var request = (HttpWebRequest) WebRequest.Create(host);
request.ClientCertificates.Add (certificate);

但是,当使用更高抽象级别的类 Microsoft.Rest.ServiceClient&lt;&gt; 时,我无法弄清楚将客户端证书引入调用管道的位置。

到目前为止我所做的尝试

  • 我检查了一些相关类的属性,没有证书 找到相关属性/方法
  • 我检查了 ServiceClientCredentials 抽象类,但只找到了两个后代:用于基于令牌的身份验证和基本身份验证。
  • 我试图在发送之前找到一些 IoC 工具来获取请求:没有成功。

【问题讨论】:

标签: c# .net rest asp.net-web-api client-certificates


【解决方案1】:

我找到了一种适合我的方法。 当我导入我的 REST API 客户端时,我修改了以下方法

原创

protected CLASSNAME(Uri baseUri, HttpClientHandler rootHandler, params DelegatingHandler[] handlers) : this(rootHandler, handlers)
        {
            if (baseUri == null)
            {
                throw new ArgumentNullException("baseUri");
            }
            this.BaseUri = baseUri;
        }

我将受保护更改为公开

public CLASSNAME(Uri baseUri, HttpClientHandler rootHandler, params DelegatingHandler[] handlers) : this(rootHandler, handlers)
            {
                if (baseUri == null)
                {
                    throw new ArgumentNullException("baseUri");
                }
                this.BaseUri = baseUri;
            }

如何使用

var handler = new WebRequestHandler();
var certFile = Path.Combine(@"path\to\your\certificate", "certificate.pfx");
handler.ClientCertificates.Add(new X509Certificate2(certFile,"<PASSWORD>"));

var client = new CLASSNAME(new Uri("URL"), handler);
//Do your methods on client

我希望这可以帮助遇到同样问题的其他人。

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 2010-12-24
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多