403 Запрещенная ошибка при доступе к Azure веб-API с использованием аутентификации сертификата - PullRequest
0 голосов
/ 19 февраля 2020

Я получаю исключение 403 Forbidden при доступе к простому azure webapi с аутентификацией по сертификату, только при доступе из asp. net веб-приложения. Я использую унаследованный объект WebClient для переопределения GetWebRequest для добавления сертификата клиента.

    public class CertificateWebClient : WebClient
    {
        private readonly X509Certificate2 certificate;

        public CertificateWebClient(X509Certificate2 cert)
        {
            certificate = cert;
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
            request.ClientCertificates.Add(certificate);
            return request;
        }
    }

И я использую функцию CertificateWebClient DownloadString для доступа к веб-API.

X509Certificate2 newCertificate = new X509Certificate2("bytearray");

CertificateWebClient webClient = new CertificateWebClient(newCertificate)
{
    Proxy = new WebProxy("proxy address")
};

var result = webClient.DownloadString("https://webapiaddress/api/Values");

Я получаю доступ веб-API аналогичным образом в windows формы, и он работает абсолютно нормально.

1 Ответ

0 голосов
/ 29 марта 2020

Я мог бы решить эту проблему, сохранив и получив сертификат из хранилища ключей Azure в строковом формате Base 64. Используя Convert.ToBase64String («необработанные данные сертификата») и Convert.FromBase64String («строка сертификата base64»), поэтому мне пришлось изменить приведенный выше код как

X509Certificate2 newCertificate = new X509Certificate2(Convert.FromBase64String("base64 cert string"));

Только формат base 64 хранит необработанные данные сертификата без изменений при добавлении / извлечении данных сертификата в azure хранилище ключей.

В идеале сертификат должен быть добавлен в Azure хранилище сертификатов хранилища ключей, но проект должен был хранить его как ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...