驗證服務管理要求

更新日期: 2015年6月

對管理服務的要求都必須使用下列其中一個方法進行驗證:

對管理服務的安全要求,可以藉由建立 Azure AD 應用程式並使用Active Directory Authentication Library從應用程式取得存取權杖,來進行驗證。如需使用 Azure AD 進行驗證的詳細資訊,請參閱 Azure AD 的驗證案例

執行下列動作可將應用程式新增至 Azure AD:

  1. 登入 Azure 管理入口網站。

  2. 在左功能表的底部按一下 [Active Directory],然後按一下 [預設目錄]。

  3. 在 [預設目錄] 頁面的 [整合應用程式] 之下,按一下 [新增您正在開發的應用程式]。

    新增 Azure AD 應用程式
  4. 輸入應用程式的名稱,選取 [NATIVE CLIENT 應用程式],然後按一下向右箭號。

    提供應用程式的名稱。
  5. 輸入應用程式的 URI,然後按一下核取記號。URI 包含前面加上 http://localhost/ 的應用程式名稱。

    輸入重新導向 URL
  6. 建立應用程式之後,您必須加入應用程式的權限以存取服務管理 API。移至您應用程式的頁面,然後按一下 [設定]。

  7. 在 [設定] 頁面底部的 [其他應用程式的權限] 區段中,按一下 [選取應用程式],然後選取 [Windows Azure 服務管理 API]。

    指派應用程式權限
  8. 按一下 [已委派的權限:0],然後選取 [存取 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;
}

當您使用上列的程式碼時,您必須取代下列項目:

  • 以應用程式的 GUID 取代 {tenantId}。若要尋找 GUID,請移至管理入口網站的 Active Directory 區段中的 [預設目錄] 頁面,選取您先前建立的應用程式,然後按一下 [檢視端點]。

    檢視端點

    複製應用程式的 GUID 並以此取代預留位置。

    複製應用程式端點
  • 以用戶端識別碼取代 {clientId}。若要尋找用戶端識別碼,請移至管理入口網站中應用程式的 [設定] 頁面。

    複製 AD 用戶端 ID
  • 以重新導向 Uri 取代 {redirectUri}。若要尋找重新導向 Uri,請移至管理入口網站中應用程式的 [設定] 頁面。

    複製應用程式重新導向 URI

使用下列這行程式碼將以上所示的 GetAuthorizationHeader 方法傳回的權杖,指派給可供要求使用的變數:

string token = GetAuthorizationHeader();

使用下列幾行程式碼將此權杖新增至要求:


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

對管理服務的安全要求,可以使用透過 SSL 的管理憑證進行驗證。若要使用管理憑證,您必須將它上傳至 Azure。將管理憑證新增至訂閱後,您可以使用憑證來簽署對服務的要求。如需有關建立管理憑證以及將憑證與訂閱建立關聯的詳細資訊,請參閱建立及上傳 Azure 的管理憑證

設計應用程式時,請留意下列關於管理憑證的要點:

  • 服務管理 API 不會驗證憑證是否仍然有效。即使憑證過期,驗證仍會成功。

  • 所有管理憑證都帶有同一組權限。在某個角色中設定某個管理憑證,而在不同的角色中設定相同訂用帳戶的另一個管理憑證,這種「以角色為基礎的」驗證概念不存在。

下列範例會說明如何使用 System.NetSystem.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);

顯示: