上下文
我有一个经过测试的工作Web API服务,该服务配置为客户端证书身份验证。现在我想打电话给它并提供客户证书。我想使用Microsoft.Rest.ServiceClient<>
,因为我使用Visual Studio 2015“添加”/“REST Api客户端...”生成了我的类型化客户端类。
注意:我必须从文件或其他流中加载我的X 509客户端证书,因为客户端将在PaaS环境中运行,因此我将无权访问任何操作系统提供的证书存储。< / p>
X509Certificate certificate = new X509Certificate(path, password);
问题
对于较低的抽象级别,我知道如何将客户端证书添加到请求中:
var request = (HttpWebRequest) WebRequest.Create(host);
request.ClientCertificates.Add (certificate);
然而,当使用更高抽象级别的类Microsoft.Rest.ServiceClient<>
时,我无法弄清楚将客户端证书引入调用管道的位置。
到目前为止我尝试了什么
ServiceClientCredentials
抽象类,但只找到了两个后代:基于令牌和基本身份验证。答案 0 :(得分:0)
我找到了一种对我有用的方法。 导入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
我希望这可以帮助您解决同样的问题。