如何在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
}
答案 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)
希望以下代码片段之一可以正常工作!
v1Credentials
X509Certificate2 targetCertificate = RetrieveCertificate();
handler.ClientCertificates.Add(targetCertificate);