通过带有客户端证书的SSL调用WEB API RestService

时间:2018-10-16 09:41:39

标签: rest asp.net-web-api ssl-certificate

给出下一个场景:

-WebAPI REST服务部署在IIS中。使用SSL保护(必需)。授权是通过扩展Authorize属性来完成的。仅当直接从浏览器进行调用时,才达到并授权控制器操作。例如:https://myServier:myPort/RestServices/api/SomeControllerAction

在浏览器中键入将本地计算机上安装的客户端证书发送到服务(如果您已安装多个证书,它将首先询问要发送哪个证书):

enter image description here

然后,选定的证书将在服务器中发送,接受和正确授权。  话虽如此,我需要以编程方式从Web应用程序(ASP.NET MVC)调用该服务。我在控制器中执行下一步以调用该服务:

string uri = ConfigurationManager.AppSettings["RestServiceAddress"];
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "GET";
        request.ContentType = "application/json";
        X509Certificate2 clientCertificate = new X509Certificate2(System.Web.HttpContext.Current.Request.ClientCertificate.Certificate);
        request.ClientCertificates.Add(clientCertificate);
        var webResponse = (HttpWebResponse)request.GetResponse();

上面的代码片段失败:服务器甚至没有到达服务,从而将调用抛出一个通用且完全误导的错误:

  

远程服务器返回错误:(403)禁止。

在调用该服务之前,我已经“打印”了ClientCertificate属性,并且显然是正确的。 这很烦人,因为我为此工作了几天。当我说“天”时,我的意思是说数天,阅读很多论坛,StackOverFlow中的所有问答也都没奏效,尝试了许多不同的方法。

任何线索,这是怎么回事?我不了解浏览器通过直接调用发送的内容(不是通过编程方式发送的内容)。

任何帮助都非常感谢。

0 个答案:

没有答案