2017-03-10 89 views
3

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

我做了一些搜索,我知道可以通过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 
} 

回答

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所以你将不得不在这个代表也分配任何其他消息处理程序。 我无法轻易检查这一点,因为我没有访问证书安全站点的权限,但代码中没有任何内容表明这不起作用。