繁体   English   中英

如何使用Microsoft.Rest.ServiceClient <>与客户端证书?

[英]How to use Microsoft.Rest.ServiceClient<> with client certificate?

上下文

我有一个经过测试的工作Web API服务,它配置为客户端证书身份验证。 现在我想打电话给它并提供客户证书。 我想使用Microsoft.Rest.ServiceClient<>因为我使用Visual Studio 2015“添加”/“REST Api客户端...”生成了我的类型化客户端类。

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

X509Certificate certificate = new X509Certificate(path, password);

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

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

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

到目前为止我尝试过的

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

我找到了一种适合我的方法。 当我导入我的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

我希望这可以帮助你是一个有同样问题的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM