Я создаю приложение Windows Phone 8.1, которое позволяет пользователям Azure просматривать свою подписку/услуги с помощью API управления Azure Service. Аутентификация выполняется с использованием сертификата управления, и сертификат привязан ко всем запросам API. Он отлично работает для одного пользователя. Но проблема возникает, когда я пытаюсь включить функцию для нескольких подписки. Я могу установить сертификат в хранилище сертификатов и получить его. Но проблема возникает, когда я отправляю запрос API. Несмотря на то, что я прикрепляю правильный сертификат, я получаю 403 запрещенную ошибку. Вот код, который я использовал.Несколько сертификатов с HttpClient
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 ограничения на сертификаты для приложения?
я испытал нечто подобное при попытке изменить сертификат клиента для запроса в отношении того же домена. Я предполагаю, что конечная точка управления, к которой вы звоните, является одним и тем же доменом. Я думаю, что это связано с базовым состоянием библиотек и «кэшированием» клиентского сертификата. Однако я не нашел упоминания об этой проблеме или о решении. – ameer
В Windows 7. 5, я помню, я не мог использовать самоподписанные сертификаты. Вам нужно было установить собственный корневой центр сертификации в хранилище? –