共用方式為


如何:針對自訂錯誤處理使用錯誤 URL

更新日期:2015 年 6 月 19 日

適用對象:Azure

套用至

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

總結

本主題說明如何使用錯誤 URL 功能,在信賴憑證者應用程式中實作自訂登入錯誤處理。 錯誤 URL 可讓您將 ACS 產生的錯誤傳送回信賴憑證者應用程式,讓應用程式可以記錄並回應錯誤。 例如,ASP.NET 網站可以使用錯誤 URL 功能,對使用者顯示和網站具有相同外觀及操作方式的錯誤訊息。

目錄

  • 目標

  • 概觀

  • 步驟摘要

  • 步驟 1 – 啟用錯誤 URL 功能

  • 步驟 2 – 建立錯誤協助程式類別

  • 步驟 3 – 處理 JSON 編碼的錯誤訊息

  • 步驟 4 – 設定對錯誤頁面的匿名存取

  • 步驟 5 – 測試您的工作

目標

  • 識別使用錯誤 URL 功能所需的組態。

  • 識別處理 ACS 錯誤訊息所需的協助程式碼。

  • 識別和排解潛在問題。

概觀

錯誤 URL 會指定 ACS 在登入程式期間發生錯誤時,將使用者重新導向至其中的網址。 錯誤 URL 目標通常是信賴憑證者應用程式所主控的自訂錯誤頁面。 在重新導向過程中,ACS 會將錯誤的相關資訊傳回給信賴憑證者應用程式做為 JSON 編碼的 HTTP URL 參數。 您可以在自訂錯誤頁面中納入 JSON 編碼的錯誤資訊,和 (或) 顯示靜態說明文字。 以下是 JSON 編碼的錯誤訊息範例。

{"context":null,"httpReturnCode":401,"identityProvider":"Google","timeStamp":"2010-12-17 21:01:36Z","traceId":"16bba464-03b9-48c6-a248-9d16747b1515","errors":[{"errorCode":"ACS30000","errorMessage":"There was an error processing an OpenID sign-in response."},{"errorCode":"ACS50019","errorMessage":"Sign-in was canceled by the user."}]}

步驟摘要

使用下列程式來處理 ACS 錯誤訊息:

  • 步驟 1 – 啟用錯誤 URL 功能

  • 步驟 2 – 建立錯誤協助程式類別

  • 步驟 3 – 處理 JSON 編碼的錯誤訊息

  • 步驟 4 – 設定對錯誤頁面的匿名存取

  • 步驟 5 – 測試您的工作

步驟 1 – 啟用錯誤 URL 功能

為您的信賴憑證者啟用錯誤 URL 功能

  1. 移至Microsoft Azure管理入口網站 (https://manage.WindowsAzure.com) 登入,然後按一下[Active Directory]。 (疑難排解提示: 「Active Directory」 專案遺失或無法使用)

  2. 若要管理存取控制命名空間,請選取該命名空間,然後按一下 [管理]。 (或按一下 [存取控制命名空間]、選取 [命名空間],然後按一下 [管理])。

  3. 按一下 [信賴憑證者應用程式],然後選取信賴憑證者應用程式。

  4. 在 [編輯信賴憑證者應用程式] 頁面上的 [錯誤 URL] 欄位中,輸入您的錯誤頁面 URL。

    ACS 會在發生登入錯誤時,將使用者重新導向至此頁面。 此外,ACS 會將 JSON URL 編碼參數傳送至此頁面,其中包含錯誤詳細資料。

步驟 2 – 建立錯誤協助程式類別

此步驟會建立將 JSON 編碼的錯誤訊息還原序列化的錯誤協助程式類別。

建立錯誤協助程式類別

  1. 將類別檔案加入至您的 Web 應用程式,並為其指定名稱,例如 Error.cs

  2. 依照下列方式實作 Error 類別。

    public class Error
    {
        public string errorCode { get; set; }
        public string errorMessage { get; set; }
    }
    

    新增另一個類別檔案,並提供名稱,例如 ErrorDetails.cs

  3. 依照下列方式實作 ErrorDetails 類別。

    public class ErrorDetails
    {
        public string context { get; set; }
        public int httpReturnCode { get; set; }
        public string identityProvider { get; set; }
        public Error[] errors { get; set; }
    }
    

處理 ACS 的錯誤訊息時,這些類別將會在下一個步驟中使用。

步驟 3 – 處理 JSON 編碼的錯誤訊息

此步驟示範如何處理 ACS 產生的 JSON 編碼錯誤訊息。

處理 ACS 所產生的 JSON 編碼的錯誤訊息

  1. 將 ASPX 網頁加入至您的 ASP.NET 應用程式,並為其指定名稱,例如 ErrorPage.aspx

  2. 將下列標籤控制項加入至 ASP.NET 標記。

    <asp:Label ID="lblIdntityProvider" runat="server"></asp:Label> 
    <asp:Label ID="lblErrorMessage" runat="server"></asp:Label> 
    
  3. 切換至頁面的程式碼後置檔案 ErrorPge.aspx.cs。

  4. 將下列宣告加入至頂端。

    using System.Web.Script.Serialization;
    
  5. 將下列程式碼加入至 Page_Load 方法。

    JavaScriptSerializer serializer = new JavaScriptSerializer(); ErrorDetails error = serializer.Deserialize<ErrorDetails>( 
    
    
                                         Request["ErrorDetails"] ); lblErrorMessage.Text = string.Join("<br/>", 
                                        error.errors.Select(er => string.Format("Error Code {0}: {1}", 
                                        er.errorCode, er.errorMessage)).ToArray());
    
    

    此程式碼會處理來自 ACS 的 JSON 編碼錯誤訊息。

步驟 4 – 設定對錯誤頁面的匿名存取

此步驟會設定對 ErrorPage.aspx 檔案的匿名存取。 如果頁面受到保護且需要授權,則會產生無限重新導向迴圈。 如果 ACS 嘗試存取頁面時發生此問題,ACS 會傳送 JSON 編碼的錯誤。

注意

由於錯誤頁面可匿名存取,且該頁面可能包含回應 HTML 和 (或) 將資料寫入資料庫的程式碼,因此您應確實防止跨網站指令碼處理和 SQL 插入式攻擊。 下列資源有其詳細說明:

設定對錯誤頁面的匿名存取

  • 在您的應用程式中開啟 web.config,並加入下列項目。

    <location path="ErrorPage.aspx">
      <system.web>
        <authorization>
          <allow users="*" />
        </authorization>
      </system.web>
    </location>
    

    這可確保對您頁面的存取不會造成無限重新導向迴圈。

步驟 5 – 測試您的工作

此步驟將測試您的錯誤 URL 組態和實作。

為您的信賴憑證者啟用錯誤 URL 功能

  1. 移至Microsoft Azure管理入口網站 (https://manage.WindowsAzure.com) 登入,然後按一下[Active Directory]。 (疑難排解提示: 「Active Directory」 專案遺失或無法使用)

  2. 若要管理存取控制命名空間,請選取該命名空間,然後按一下 [管理]。 (或按一下 [存取控制命名空間]、選取 [命名空間],然後按一下 [管理])。

  3. 按一下 [規則群組],然後按一下與信賴憑證者應用程式相關聯的規則群組。

  4. 警告

    下列步驟無法復原。 不過,如果您刪除了產生的規則,您可以輕易地重新產生這些規則。

  5. 在 [編輯規則群組] 頁面上,選取 [規則] 區段中的所有規則,然後按一下 [刪除選取的規則]

  6. 按一下 [檔案] 。

  7. 返回您的網站,並使用您的瀏覽器瀏覽至其中一個頁面。

  8. 您應該重新導向至您的身分識別提供者以進行驗證,Windows Live ID (Microsoft 帳戶) 、Google、Facebook、Yahoo!或 —任何為信賴憑證者設定為身分識別提供者的專案。

  9. 成功驗證之後,您應該重新導向回 ACS,這應該會產生錯誤,因為未定義任何規則。

  10. 此錯誤應該會顯示在您在步驟 2 – 建立錯誤協助程式類別中建立的錯誤頁面上,而且如下所示:

    uri:WindowsLiveID 錯誤碼 ACS50000:發出權杖時發生錯誤。

另一種測試方式是拒絕使用者同意。 這會在您使用 Facebook 或 Google 登入時顯示。