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

作法:使用錯誤 URL 進行自訂錯誤處理

發佈時間: 2011年4月

更新日期: 2015年6月

適用於: 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. 移至 Microsoft Azure 管理入口網站 (https://manage.WindowsAzure.com),登入後按一下 [Active Directory]。(疑難排解提示:"Active Directory" 項目遺失或無法使用)

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

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

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

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

此步驟會建立將 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 的錯誤訊息時,會使用這些類別。

此步驟說明如何處理 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 編碼錯誤訊息。

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

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

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

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

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

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

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

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

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

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

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

  6. 按一下 [儲存]

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

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

  9. 成功驗證後,您應會重新導向至 ACS,而由於未定義任何規則,因此應會產生錯誤。

  10. 此錯誤應會顯示在您於步驟 2 – 建立錯誤協助程式類別中建立的錯誤頁面上,並且會類似下列內容:

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

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

顯示: