Использование сертификата управления с 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 когда ты можешь.

Другие вопросы по тегам