2

アプリケーションで Azure サービス管理 REST API を使用しています。Azure に管理証明書をアップロードし、ローカルにコピーを持っています。アプリケーション自体の別のフォルダー (AzureCertificate) に証明書を保持し、その場所を参照します。例えば:

string certificatePath = Server.MapPath("~/AzureCertificate/") + certificateName;

X509Certificate2 証明書 = 新しい X509Certificate2(certificatePath);

AzureCertificate -- フォルダー名 certificateName - MyCertificatieName.cer

アプリケーションをローカル開発環境で実行すると、正常に動作します。しかし、Azure Web サイトに同じものをデプロイすると、以下のエラーが発生します。

リモート サーバーがエラーを返しました: (403) Forbidden

これが私がリクエストを行う方法です

文字列 uri = apiURL + subscriptionId + "/services/hostedservices";

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uri);

X509Certificate2 証明書 = 新しい X509Certificate2(certificatePath);

req.ClientCertificates.Add(証明書);

req.Headers.Add("x-ms-バージョン", "2009-10-01"); HttpWebResponse res =

(HttpWebResponse)req.GetResponse();

しかし、最後の行 (req.GetResponse()) で上記の例外をスローします。

このように管理証明書を使用できますか?

私の要件は、Azure REST API を使用して Azure にデプロイするアプリケーションを開発することです。

4

2 に答える 2

1

また、Management 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 またはリモート アクセス証明書ではありません。

于 2016-01-01T08:13:52.063 に答える
0

Azure Management SDK を使用することをお勧めします。Microsoft.WindowsAzure.Managementという名前の nuget パッケージからそれをインストールし、適切なクラス/メソッドを使用して、やりたいことを実行できます。

HTTP と REST API を介して直接何かを行う必要がある場合HttpClient、代わりに を使用することをお勧めしHttpWebRequestます。(は、 Microsoft.Net.HttpHttpClientという名前の別の nuget パッケージです。その後、 (プロパティを介して) を使用して、HTTP 要求を設定できます。次に例を示します。SubscriptionCloudCredntialsManagementClient.Credentials

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使えるときに使うことをお勧めします。

于 2014-09-30T17:53:21.490 に答える