如何在Simple.OData.Client中使用证书身份验证?

时间:2017-03-10 02:14:34

标签: c# odata simple.odata simple.odata.client

如何在Simple.OData.Client中进行证书身份验证?我有X509Certificate2,我想在调用api时使用。我使用.net framework 4.6。

我做了一些搜索,我发现可以通过HttpClientHandler添加。但我无法弄清楚如何做到这一点。以下是我的代码。

void foo()
{
   var clientSettings = new ODataClientSettings("");
   clientSettings.OnApplyClientHandler = new Action<HttpClientHandler>(AddClientCertificate);
   var client = new ODataClient(clientSettings);
}

private void AddClientCertificate(HttpClientHandler handler )
{
// I have working code to retrieve the certificate.
X509Certificate2 targetCertificate = RetrieveCertificate();

//TODO : Add the certificate to the HttpClientHandler
}

2 个答案:

答案 0 :(得分:0)

: 使用ODataClientSettings.OnCreateMessageHandler并返回WebRequestHandler并设置ClientCertificates

I have found the solution from this github issue:

  

再次查看代码您需要做的是将委托分配给OnCreateMessageHandler而不是OnApplyClientHandler,因为底层代码会创建一个HttpClientHandler而您需要一个WebRequestHandler,例如

var setting = new ODataClientSettings(baseAddresss, credentials) 
{
     OnCreateMessageHandler = { 
     var handler = new WebRequestHandler();
     handler.ClientCertificates.Add(certificate);

     return handler;
     }
}
  

请注意,如果您这样做,它将不会调用OnApplyClientHandler,因此您还必须在此委托中分配任何其他消息处理程序。   我无法轻易检查出来,因为我无法访问证书安全网站,但代码中没有任何内容可以说明这项工作无法使用。

答案 1 :(得分:0)

希望以下代码片段之一可以正常工作!

  1. v1Credentials

  2. X509Certificate2 targetCertificate = RetrieveCertificate(); handler.ClientCertificates.Add(targetCertificate);