Использование сертификата управления с Azure REST API
Я использую REST API управления службами Azure в своем приложении. Я загрузил сертификат управления на лазурном и есть копия на местном. Я храню сертификацию в отдельной папке (AzureCertificate) в самом приложении и ссылаюсь на это местоположение. например:
строка certificatePath = Server.MapPath ("~ / AzureCertificate /") + certificateName;
X509Certificate2 сертификат = новый X509Certificate2(CertificatePath);
AzureCertificate - имя папки CertificateName - MyCertificatieName.cer
он отлично работает, когда я запускаю приложение в своей локальной среде разработки. Но я получаю приведенную ниже ошибку при развертывании того же на веб-сайте Azure.
Удаленный сервер возвратил ошибку: (403) Запрещено
Вот как я делаю запрос
строка uri = apiURL + subscriptionId + "/ services / hostedservices";
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create (uri);
X509Certificate2 сертификат = новый X509Certificate2(CertificatePath);
req.ClientCertificates.Add(сертификат);
req.Headers.Add ("x-ms-version", "2009-10-01"); HttpWebResponse res =
(HttpWebResponse) req.GetResponse ();
Но он выбрасывает указанное выше исключение в последнюю строку (req.GetResponse()).
Можем ли мы использовать сертификат управления таким образом?
Мое требование - разработать приложение, использующее API-интерфейс Azure REST, и развернуть его в Azure.
2 ответа
Я также обнаружил, что создание сертификата точно правильным способом для использования с API управления очень важно - я получал 403 ошибки, пока не использовал этот скрипт для создания сертификата:
makecert -r -pe -a sha1 -n "CN=Windows Azure Authentication Certificate" -ss my -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 ManagementApiCert.cer
Я получил это здесь: http://blogs.msdn.com/b/davidhardin/archive/2013/08/27/azure-management-certificate-public-key-private-key.aspx которому несколько лет, но работал для меня, когда другие новые, которые я попробовал, не сделали.
Кроме того, убедитесь, что вы загружаете сертификат в разделе "Сертификаты управления" в настройках портала, это не сертификат SSL или сертификат удаленного доступа.
Я бы предложил использовать SDK Azure Management. Вы можете установить его из пакета nuget с именем Microsoft.WindowsAzure.Management и использовать соответствующий класс / метод для выполнения того, что вы хотите.
Если вам нужно что-то сделать напрямую через HTTP и REST API, я бы предложил использовать HttpClient
вместо HttpWebRequest
, (HttpClient
это еще один пакет nuget с именем Microsoft.Net.Http. Вы можете использовать SubscriptionCloudCredntials
(через ManagementClient.Credentials
свойство), чтобы заполнить HTTP-запрос для вас. Например:
var client = new ManagementClient(
new CertificateCloudCredentials(subscriptionId, certificate));
//...
var requestMessage = new HttpRequestMessage(HttpMethod.Get, apiURL);
await client.Credentials.ProcessHttpRequestAsync(requestMessage,
CancellationToken.None);
var httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.SendAsync(requestMessage);
// TODO: process response, maybe:
var responseText = response.AsString();
Я бы порекомендовал использовать client
когда ты можешь.