本文件已封存並已停止維護。

作法:使用 ACS 管理服務將 AD FS 2.0 設定為企業身分識別提供者

發佈時間: 2011年4月

更新日期: 2015年6月

適用於: Azure

  • Microsoft® Azure™ 存取控制服務 (ACS)

  • Microsoft Active Directory® Federation Services (AD FS) 2.0

本主題說明如何將 身分識別提供者加入至命名空間或信賴憑證者應用程式。若要執行此工作,您可以使用 ACS 管理服務。當您建立自訂使用者介面來管理 ACS 時,以及針對多租用戶「軟體即服務」(SaaS) 解決方案而將新增租用戶的工作自動化時,管理服務特別有用。

  • 目標

  • 概觀

  • 步驟摘要

  • 步驟 1 – 收集設定資訊

  • 步驟 2 – 新增必要服務與組件的參考

  • 步驟 3 – 實作 Management Service Proxy

  • 步驟 4 – 新增身分識別提供者

  • 步驟 5 – 測試您的工作

  • 識別需求和設定資訊。

  • 列出必要步驟。

  • 驗證設定是否成功。

ACS 管理服務是一個向程式碼公開 ACS 功能的 Web 服務。ACS 管理服務可以存取所有 ACS 功能,包括 ACS 管理入口網站使用者介面中可用的功能子集。

將 Microsoft 新增到 ACS 做為身分識別提供者,可讓您重新利用在雲端型解決方案之企業身分識別管理方面已做的投資。若要設定 作為身分識別提供者,您需要按照特定步驟撰寫程式碼。本主題概述這些基本步驟。

  • 步驟 1 – 收集設定資訊

  • 步驟 2 – 新增必要服務與組件的參考

  • 步驟 3 – 實作 Management Service Proxy

  • 步驟 4 – 新增身分識別提供者

  • 步驟 5 – 測試您的工作

此步驟說明如何收集必要的設定資訊。您需要收集下列資訊:

  • 管理服務身分識別使用者名稱。預設值為 ManagementClient

  • 管理服務身分識別密碼。

  • 命名空間名稱。

  • ACS 主機名稱:accesscontrol.windows.net

  • 簽署憑證字串:從 部署中取得 AD FS 簽署憑證字串。

若要尋找管理服務身分識別使用者名稱和密碼,請使用下列程序。

  1. 移至 Microsoft Azure 管理入口網站 (https://manage.WindowsAzure.com),登入後按一下 [Active Directory]。(疑難排解提示:"Active Directory" 項目遺失或無法使用) 若要管理存取控制命名空間,請選取該命名空間,然後按一下 [管理]。(或按一下 [存取控制命名空間]、選取 [命名空間],然後按一下 [管理])。

  2. 按一下 [管理服務],然後選取管理服務,例如 ManagementClient

  3. [名稱] 欄位值是 Management Service identity username

  4. 在 [認證] 區段中,按一下 [密碼]。密碼欄位中的值為管理服務身分識別密碼

在收集必要資訊後,請遵循這些步驟以建立範例主控台應用程式來執行程式碼,將 新增為身分識別提供者:

  1. 啟動 Visual Studio 並建立新的主控台應用程式專案。

  2. 在 [程式] 類別中,指派設定資訊值給具有模組範圍的變數。下列程式碼範例顯示可能的作法。

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    
    
    

此步驟識別並將必要的相依性新增到服務與組件。

  1. 新增 System.Web.Extensions 的參考。

  2. 新增管理服務的服務參考。管理服務的 URL 對您的命名空間而言是唯一的,而且外觀應與下列內容類似:

    https://您的命名空間.accesscontrol.windows.net/v2/mgmt/service

  3. 新增下列宣告。

    using System.Web; 
    using System.Net; 
    using System.Data.Services.Client; 
    using System.Collections.Specialized; 
    using System.Web.Script.Serialization;
    
    

此步驟會建立一個方法來封裝 Management Service Proxy 的實作。

  1. 將下列方法新增至 Program 類別。

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                ManagementService managementService = 
    new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
    
  2. 實作 GetTokenWithWritePermission 方法及其協助程式方法。它會將 SWT OAuth 權杖新增到 HTTP 要求的授權標頭。

    
            public static void GetTokenWithWritePermission(object sender, 
    SendingRequestEventArgs args)
            {
                GetTokenWithWritePermission((HttpWebRequest)args.Request);
            }
    
            public static void GetTokenWithWritePermission(HttpWebRequest args)
            {
                if (cachedSwtToken == null)
                {
                    cachedSwtToken = GetTokenFromACS();
                }
    
                args.Headers.Add(HttpRequestHeader.Authorization, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "POST", 
          values);
    
                string response = Encoding.UTF8.GetString(responseBytes);
    
                // Parse the JSON response and return the access token 
                JavaScriptSerializer serializer = new JavaScriptSerializer();
    
                Dictionary<string, object> decodedDictionary = 
    serializer.DeserializeObject(response) as Dictionary<string, object>;
    
                return decodedDictionary["access_token"] as string;
    
            }
    
    

此步驟會使用您稍早建立的 Management Service Proxy,將 新增為身分識別提供者。

  1. 初始化 Management Service Proxy。

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. 將身分識別提供者新增為簽發者。

    Issuer issuer = new Issuer
           {
           Name = identityProviderName
    };
           svc.AddToIssuers(issuer);
           svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  3. 建立身分識別提供者。

    IdentityProvider identityProvider = new IdentityProvider()
    {
        DisplayName = identityProviderName,
        Description = identityProviderName,
        WebSSOProtocolType = "WsFederation",
        IssuerId = issuer.Id
    };
           svc.AddObject("IdentityProviders", identityProvider);
    
    
  4. 使用您稍早獲得的憑證當做基礎,建立一個身分識別提供者簽署金鑰。

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
    
  5. 更新身分識別提供者登入位址。

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  6. 將身分識別提供者設為可供信賴憑證者使用,但管理服務除外。

    foreach (RelyingParty rp in svc.RelyingParties)
    {
        // skip the built-in management RP. 
        if (rp.Name != "AccessControlManagement")
        {
            svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
            {
                IdentityProviderId = identityProvider.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    

  1. 在 [存取控制服務] 頁面上,按一下 [信任關係] 區段中的 [規則群組] 連結。

  2. 按一下任何一個可用的規則。

  3. 在 [編輯規則群組] 頁面上,按一下 [新增規則] 連結。

  4. 在 [新增宣告規則] 頁面上,從 [宣告簽發者] 區段的下拉式清單中選擇最近新增的身分識別提供者。

  5. 保留剩餘的預設值不變。

  6. Haga clic en Guardar.

您剛剛已經建立了身分識別提供者的傳遞規則。

顯示: