给出下一个场景:
-WebAPI REST服务部署在IIS中。使用SSL保护(必需)。授权是通过扩展Authorize属性来完成的。仅当直接从浏览器进行调用时,才达到并授权控制器操作。例如:https://myServier:myPort/RestServices/api/SomeControllerAction
在浏览器中键入将本地计算机上安装的客户端证书发送到服务(如果您已安装多个证书,它将首先询问要发送哪个证书):
然后,选定的证书将在服务器中发送,接受和正确授权。 话虽如此,我需要以编程方式从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中的所有问答也都没奏效,尝试了许多不同的方法。
任何线索,这是怎么回事?我不了解浏览器通过直接调用发送的内容(不是通过编程方式发送的内容)。
任何帮助都非常感谢。