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

將 ACS 同盟應用程式和服務部署到 Azure

更新日期: 2015年6月

  • Microsoft Azure Active Directory 存取控制服務 (也稱為「存取控制服務」或 ACS)

  • Windows Identity Foundation (WIF)

  • Microsoft Azure

此主題整合了您在開發採用 ACS 以及將會部署至 Azure 的應用程式與服務時所應考量的指導方針。

  1. 使用計算模擬器動態處理產生的連接埠。

  2. 將 Windows Identity Foundation (WIF) Runtime 部署至 Azure。

  3. 使用 RSA 加密 Cookie。

  4. 設定透過反射啟動以部署至 Azure 的組件。

本節將說明建立 Web 應用程式時的相關事宜。建立 Web 服務時的情形則不在本節討論之列。「計算模擬器」是 Azure SDK 工具的一部分。您將應用程式以託管服務的形式部署至 Azure 之前,可先使用此模擬器執行、測試、偵錯及微調該應用程式。在計算模擬器中無法配置唯一的 IP 位址。計算模擬器會嘗試指派受要求的連接埠。若該連接埠無法使用,則會配置下一個最適用的連接埠號碼。這表示在計算模擬器中,您的服務可能會被指派與您在定義檔中指定的連接埠號碼不同的連接埠號碼。如需「計算模擬器」的詳細資訊,請參閱 Windows Azure 計算模擬器概觀 (http://go.microsoft.com/fwlink/?LinkId=221212)。

若計算模擬器配置了與 ACS 管理入口網站中設定為 [傳回 URL] 的 IP 位址不同的 IP 位址,則 ACS 會將已驗證的要求重新導向至信賴憑證者設定的 [傳回 URL] 欄位中所設定的 URL,但此 URL 中將沒有相符頁面存在。因此,您將會看見空白頁面。

若要解決此行為帶來的問題,請將雲端 Web 應用程式的端點公用連接埠設定為電腦上可用的連接埠。如此,計算模擬器即不會指派隨機連接埠,以避免衝突。

  1. 若要開啟命令提示字元,請按一下 [開始],鍵入 cmd,然後按 Enter 鍵。

  2. 執行下列命令,以顯示本機主機 IP 位址與已使用連接埠的清單:netstat –a –n | findstr 127.0.0.1

  3. 掃描整份清單,並找出目前非使用中的連接埠。您在下列步驟中將會使用此連接埠。

  4. 在 [方案總管] 中按兩下您的角色,此角色位於雲端專案中的 [角色] 資料夾下。角色內容頁面會隨即開啟。

  5. 在 [Web 角色內容] 頁面上,按一下 [端點] 索引標籤。

  6. 在 [公用連接埠] 檔案中,指定您在步驟 3 中找出的連接埠值。

  7. 若要儲存工作,請按 Ctrl+S。

Windows Identity Foundation (WIF) 是必須安裝在電腦上讓您的宣告感知應用程式能夠加以使用的頻外執行階段。WIF 依預設不會安裝在 Azure 執行個體上。若要執行您的雲端宣告感知應用程式,您必須讓 Azure 執行個體上有可用的 WIF 執行階段。若要執行此動作,最簡單的方式就是在部署套件中納入 WIF 組件。

  1. 在 [方案總管] 中,找出您的宣告感知應用程式。

  2. 展開 [參考] 資料夾。

  3. 在 [參考] 資料夾下找出 Microsoft.IdentityModel 組件。

  4. 以滑鼠右鍵按一下該組件,然後按一下 [內容]。

  5. 在內容視窗中,將 [複製本機] 指定為 True,並將 [特定版本] 指定為 False

本節將說明建立 Web 應用程式時的相關事宜。根據預設,WIF 會使用資料保護應用程式開發介面 (DPAPI),以密碼編譯的方式保護 Cookie。DPAPI 在 Azure 上無法使用。若要確保您的雲端宣告感知 Web 應用程式在顯示到 Azure 時能夠正常運作,您必須使用 RSA 新增 Cookie 加密功能。

  1. 在 [方案總管] 中,找出您的雲端宣告感知 Web 應用程式。

  2. 在 Visual Studio 編輯器中開啟 global.asax.cs 檔案,這是 global.asax 檔案的後置程式碼。

  3. 新增下列宣告:

    using Microsoft.IdentityModel.Tokens;
    using Microsoft.IdentityModel.Web;
    using Microsoft.IdentityModel.Web.Configuration;
    
  4. 新增下列程式碼:

    void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
    {
        //
        // Use the <serviceCertificate> to protect the cookies that are
        // sent to the client.
        //
        List<CookieTransform> sessionTransforms =
            new List<CookieTransform>(new CookieTransform[] {
            new DeflateCookieTransform(), 
            new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
            new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)  });
        SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
        e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
    }
    
    void Application_Start(object sender, EventArgs e)
    {
        FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
    
    note附註
    若您已新增 Application_Start 事件處理常式,您可以將其更新以納入此程式碼。

  5. 儲存您的工作。

在某些情況下,組件會透過反射啟動,例如在開發 Representational State Transfer (REST) wcf 服務或負責檢查傳入 SWT 權杖的 HttpModule 時。若要確保這些組件會部署至 Azure,您必須另外執行適當步驟將其新增至部署套件中。

  1. 展開雲端宣告感知 Web 應用程式或服務的 bin 資料夾。

  2. 以滑鼠右鍵按一下該組件,然後按一下 [加入至專案]。

  3. 以滑鼠右鍵按一下相同程式庫,然後按一下 [內容]。

  4. 在 [內容] 視窗中,針對 [複製到輸出目錄] 按一下 [有更新時才複製]。

另請參閱

顯示: