共用方式為


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

套用至

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

  • Windows Identity Foundation (WIF)

  • Microsoft Azure

總結

本主題會合並您在開發使用 ACS 的應用程式和服務時,應該考慮的指導方針,並將部署至 Azure。

目標

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

  2. 將Windows Identity Foundation (WIF) 執行時間部署至 Azure。

  3. 使用 RSA 加密 Cookie。

  4. 設定透過反映叫用的元件以部署至 Azure。

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

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

如果 Compute Emulator配置與 ACS 管理入口網站中設定為 [傳回 URL] 的 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 Runtime 部署至 Windows Azure

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

在 Windows Azure 部署套件中納入 WIF 組件

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

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

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

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

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

使用 RSA 加密 Cookie

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

使用 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;
    

    注意

    若您已新增 Application_Start 事件處理常式,您可以將其更新以納入此程式碼。

  5. 儲存您的工作。

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

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

將透過反射啟動的組件新增至 Windows Azure 部署套件

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

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

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

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

另請參閱

概念

ACS 指導方針索引