Csharp/C#教程:HttpRequestMessage.GetClientCertificate()在Web API中返回null分享


HttpRequestMessage.GetClientCertificate()在Web API中返回null

我有一个.NET4.5 WebAPI 2应用程序,它使用SSL客户端证书进行一些自定义安全相关检查。

调试应用程序时,无论我到目前为止尝试了什么, request.GetClientCertificate()都会为任何服务调用返回null

经测试的代码:

基本上,在我的服务方面,我有一个类似这样的方法:

 class CertificateChecker : ICertificateChecker { public bool Check(HttpRequestMessage request) { var cert = request.GetClientCertificate(); } } 

我的单元使用request.Properties.Add(HttpPropertyKeys.ClientCertificateKey, cert)传递附加到请求的客户端证书进行测试(证书完全符合预期,validation工作,等等)。

但是,当我使用HttpClient调用实际WebAPI应用程序的测试时,在服务端的request.GetClientCertificate()行设置断点,同一行返回null。

这是我尝试过的:

客户证书:

(基本上,按照https://www.piotrwalat.net/client-certificate-authentication-in-asp-net-web-api-and-windows-store-apps/和类似的博客)

在我使用HttpClient调用服务的测试中,以下列方式附加了客户端证书(没有一个工作):

在两种情况下, cert变量都设置为预期的X509Certificate2对象。

主机:

在这两种情况下,当使用Web浏览器通过https url访问web api时,我得到家庭控制器的索引视图以显示没有问题(因此,服务器端证书是可信的)。

有关您的问题的详细信息。

我将假设问题是附加客户端证书w / HttpClient,因为在那种情况下你无法在服务器端查看证书。 所有托管和服务器端证书配置听起来都不错。

  1. 我要确保您附加的X509Certificate2 cert变量是本地证书存储中存在的公钥(我不确定您存储的是哪个存储位置)(您可以使用mmc.exe进行检查)。 还要确保公钥具有私钥,因为HttpClient需要对其进行签名。

  2. 在您的代码片段中,您在代码的其余部分之前using (var handler = new WebRequestHandler()) 。 确保你在使用中构建你的HttpClient client = new HttpClient(handler) ,否则处理程序将被处理掉。

否则处理程序创建看起来很好。

祝好运!

上述就是C#学习教程:HttpRequestMessage.GetClientCertificate()在Web API中返回null分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1027607.html

(0)
上一篇 2022年1月10日
下一篇 2022年1月10日

精彩推荐