このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
MSDN ライブラリ

サービス管理要求の認証

更新日: 2015年6月

管理サービスに対する要求は、次のいずれかの方法を使用して認証する必要があります。

管理サービスに対するセキュリティ保護要求を認証するには、Azure AD アプリケーションを作成し、Active Directory Authentication Library を使用してアプリケーションからアクセス トークンを取得します。Azure AD を使用した認証の詳細については、「Azure AD の認証シナリオ」を参照してください。

次のようにしてアプリケーションを Azure AD に追加します。

  1. Azure 管理ポータルにサインインします。

  2. 左側のメニューの下部で、[Active Directory] をクリックし、[既定のディレクトリ] をクリックします。

  3. [既定のディレクトリ] ページで、[アプリケーションの統合] の [開発中のアプリケーションを追加] をクリックします。

    Azure AD アプリケーションの追加
  4. アプリケーションの名前を入力し、[ネイティブ クライアント アプリケーション] を選択して、右矢印をクリックします。

    アプリケーション名の入力
  5. アプリケーションの URI を入力し、チェックマークをクリックします。URI は、アプリケーションの名前の前に http://localhost/ を付けたものです。

    リダイレクト URL の入力
  6. アプリケーションを作成した後、サービス管理 API にアクセスするためのアクセス許可をアプリケーションに追加する必要があります。アプリケーションのページに移動し、[構成] をクリックします。

  7. 構成ページの下部にある [他のアプリケーションに対するアクセス許可] セクションで、[アプリケーションの選択] をクリックし、[Windows Azure サービス管理 API] を選択します。

    アプリケーションへのアクセス権の割り当て
  8. [委任されたアクセス許可:0] をクリックし、[Access Azure サービス管理] を選択します。

    アクセス権の設定の続行
  9. 下部メニューの [保存] をクリックします。

NuGet パッケージを使用することで、Active Directory Authentication Library を Visual Studio プロジェクトに簡単にインストールできます。パッケージをインストールするには、次の手順に従います。

  1. ソリューション エクスプローラーでプロジェクト名を右クリックし、[NuGet パッケージの管理] をクリックします。

    NuGet パッケージの管理
  2. 検索ボックスに「Active Directory」と入力して、[Active Directory 認証ライブラリ] パッケージの [インストール] をクリックし、指示に従ってパッケージをインストールします。

    Active Directory ライブラリのインストール

次のコード例では、アクセス トークンを取得する方法を示します。


private static string GetAuthorizationHeader()
{
  AuthenticationResult result = null;
  
  var context = new AuthenticationContext("https://login.windows.net/{tenantId}");

  var thread = new Thread(() =>
  {
    result = context.AcquireToken(
      "https://management.core.windows.net/",
      "{clientId}",
      new Uri("{redirectUri}"));
  });

  thread.SetApartmentState(ApartmentState.STA);
  thread.Name = "AquireTokenThread";
  thread.Start();
  thread.Join();
            
  if (result == null)
  {
    throw new InvalidOperationException("Failed to obtain the JWT token");
  }

  string token = result.AccessToken;
  return token;
}

上記のコードを使用するときは、以下のように置き換える必要があります。

  • {tenantId} は、アプリケーションの GUID に置き換えます。GUID を調べるには、管理ポータルの [Active Directory] セクションで [既定のディレクトリ] ページに移動し、先に作成したアプリケーションを選択して、[エンドポイントの表示] をクリックします。

    エンドポイントの表示

    アプリケーションの GUID をコピーし、プレースホルダーを置き換えます。

    アプリケーション エンドポイントをコピー
  • {clientId} は、クライアントの識別子に置き換えます。クライアントの識別子を調べるには、管理ポータルでアプリケーションの [構成] ページに移動します。

    AD クライアント ID のコピー
  • {redirectUri} は、リダイレクト URI に置き換えます。リダイレクト URI を調べるには、管理ポータルでアプリケーションの [構成] ページに移動します。

    アプリケーションのリダイレクト URI をコピー

次のコード行を使用して、上記の GetAuthorizationHeader メソッドから返されたトークンを、要求で使用できる変数に割り当てます。

string token = GetAuthorizationHeader();

次のコード行を使用して、トークンを要求に追加します。


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);

管理サービスに対するセキュリティ保護要求を認証するには、SSL 上で管理証明書を使用します。管理証明書を使用するには、Azure にアップロードする必要があります。管理証明書をサブスクリプションに追加したら、証明書を使用してサービスに対する要求に署名できます。管理証明書を作成してサブスクリプションに関連付ける方法の詳細については、「Azure の管理証明書の作成とアップロード」を参照してください。

アプリケーションを設計するときは、管理証明書の次の点に注意してください。

  • Service Management API では、証明書の有効期限が切れていないかどうかが検証されません。有効期限の切れた証明書についても、認証が成功します。

  • すべての管理証明書は、同じ特権の組み合わせを有します。"ロール ベース" 認証の概念は存在しません。つまり、同じサブスクリプションの管理証明書をそれぞれ異なるロールで構成することはできません。

次の例では、System.Net および System.Security.Cryptography.X509Certificates ライブラリを使用して管理証明書を取得する方法を示します。


private static X509Certificate2 GetStoreCertificate(string thumbprint)
{
  List<StoreLocation> locations = new List<StoreLocation>
  { 
    StoreLocation.CurrentUser, 
    StoreLocation.LocalMachine
  };

  foreach (var location in locations)
  {
    X509Store store = new X509Store("My", location);
    try
    {
      store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
      X509Certificate2Collection certificates = store.Certificates.Find(
        X509FindType.FindByThumbprint, thumbprint, false);
      if (certificates.Count == 1)
      {
        return certificates[0];
      }
    }
    finally
    {
      store.Close();
    }
  }
  throw new ArgumentException(string.Format(
    "A Certificate with Thumbprint '{0}' could not be located.",
    thumbprint));
}

次のコード行を使用して、上記の GetStoreCertificate メソッドから返された証明書を、要求で使用できる変数に割り当てます。

noteメモ
サブスクリプションに追加した管理証明書の場合、Thumbprint はサムプリントを表します。


X509Certificate2 certificate = GetStoreCertificate(Thumbprint);

次のコード行を使用して、証明書を要求に追加します。


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.ClientCertificates.Add(certificate);

表示:
© 2015 Microsoft