С учетом следующего сценария:
-WebAPI REST Service развернут в IIS.Защищено с помощью SSL (обязательно).Авторизация осуществляется через расширение атрибута Authorize.Действие контроллера достигается и разрешается ТОЛЬКО, если вызов выполняется из браузера напрямую.Например: https://myServier:myPort/RestServices/api/SomeControllerAction
Набрав, что в браузере отправляет клиенту сертификат, установленный на локальном компьютере, в службу (сначала запрашивается, какой из них отправить, если у вас установлено несколько сертификатов):
Затем выбранный сертификат отправляется, принимается и должным образом авторизуется на сервере.Сказав это, мне нужно вызвать службу программно из веб-приложения (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, и ничего не работает, пробовал множество разных подходов.
Есть какие-нибудь подсказки, что здесь происходит?Я не понимаю, что браузер отправляет через прямой вызов, который я не отправляю программно.
Любая помощь супер очень ценится.