Несколько сертификатов с HttpClient

Я создаю приложение Windows Phone 8.1, которое позволяет пользователям Azure просматривать свою подписку/услуги с помощью API управления Azure Service. Аутентификация выполняется с использованием сертификата управления, и сертификат привязан ко всем запросам API. Он отлично работает для одного пользователя. Но проблема возникает, когда я пытаюсь включить функцию для нескольких подписки. Я могу установить сертификат в хранилище сертификатов и получить его. Но проблема возникает, когда я отправляю запрос API. Несмотря на то, что я прикрепляю правильный сертификат, я получаю 403 запрещенную ошибку. Вот код, который я использовал.

public async Task<Certificate> GetCertificate()
{
          await CertificateEnrollmentManager.ImportPfxDataAsync(Certificate, "", ExportOption.Exportable, KeyProtectionLevel.NoConsent, InstallOptions.None, SubscriptionID);
          CertificateQuery query = new CertificateQuery();
          query.FriendlyName = SubscriptionID;
          var c = await CertificateStores.FindAllAsync(query);
          return c[0];
}

public async Task<HttpResponseMessage> SendRequest(string url,string version)
{
        HttpResponseMessage response = null;
        try
        {
            HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
            filter.ClientCertificate = await GetCertificate();
            HttpClient client = new HttpClient(filter);
            HttpRequestMessage request = new HttpRequestMessage();
            request.RequestUri = new Uri(url);
            request.Headers.Add("x-ms-version", version);
            response = await client.SendRequestAsync(request, 0);
            return response;
        }
        catch(Exception e)
        {
            var status=Windows.Web.WebError.GetStatus(e.HResult);
            if (status == WebErrorStatus.CannotConnect)
                throw new Exception("Cannot connect to internet. Check your connection.");
            else if (status == WebErrorStatus.Disconnected)
                throw new Exception("Connection was disconnected.");
            else if (status == WebErrorStatus.ServiceUnavailable)
                throw new Exception("Server was unavailable");
            else if (status == WebErrorStatus.ConnectionReset)
                throw new Exception("Connection was reset.");
            else if (status == WebErrorStatus.BadGateway)
                throw new Exception("Bad gateway.");
            else if (status == WebErrorStatus.InternalServerError)
                throw new Exception("Internal server error occurred");
            else if (status == WebErrorStatus.HostNameNotResolved)
                throw new Exception("Check your network connection. Host name could not be resolved.");
        }
        return response;

 }

Имеет ли ОС Windows Phone ограничения на сертификаты для приложения?

Ответы

Ответ 1

Если вы действительно не отвечаете на вопрос о том, как справиться с проблемой вашего сертификата, я бы предложил вам обходной путь, который будет работать еще лучше.

Используйте авторизацию OAuth с маркером-носителем и аутентификацию ADA ADE для Service API, а не сертификаты.

Таким образом, вместо управления несколькими сертификатами вы просто используете ADAL, чтобы получить токен от Azure AD. И единственный токен, который вы получите, будет действителен для всех подписей, к которым у пользователя есть доступ.

Вы можете больше узнать о аутентификации API-интерфейсов управления сервисами с помощью Azure AD здесь.

И вы можете узнать больше об использовании ADAL с приложением Windows Phone здесь.

Вы предоставляете вашему приложению собственный клиент доступ к API управления Azure Service:

enter image description here