Практическое руководство. Использование URL-адреса ошибки для пользовательской обработки ошибок

Обновлено: 19 июня 2015 г.

Область применения: Azure

Применяется к

  • Microsoft Azure Active Directory Access Control (также называется Access Control Service или ACS)

Сводка

В этом разделе объясняется, как использовать функцию «URL-адрес ошибки» для реализации обработки ошибки пользовательского входа в приложении проверяющей стороны. URL-адрес ошибки позволяет отправлять ошибки, создаваемые ACS обратно в приложение проверяющей стороны, чтобы приложение лось в журнал и реагировать на ошибки. Например, веб-сайты ASP.NET могут использовать функцию «URL-адрес ошибки» для представления сообщений об ошибках для конечных пользователей, которые имеют тот же фирменный внешний вид, что и веб-сайт.

Содержимое

  • Задачи

  • Обзор

  • Сводка действий

  • Шаг 1. Включение функции URL-адрес ошибки

  • Шаг 2. Создание вспомогательных классов ошибок.

  • Шаг 3. Обработка сообщения об ошибке с кодированием JSON

  • Шаг 4. Настройка анонимного доступа к странице ошибки

  • Шаг 5. Тестирование работы

Задачи

  • Определение необходимой конфигурации с помощью функции «URL-адрес ошибки».

  • Определите вспомогательный код, необходимый для обработки сообщений об ошибках из ACS.

  • Определение и устранение потенциальных проблем.

Обзор

URL-адрес ошибки указывает веб-адрес, на который ACS перенаправляет пользователей при возникновении ошибки во время входа. Целевой URL-адрес ошибки обычно представляет собой пользовательскую страницу ошибки, которая размещается в приложении проверяющей стороны. В рамках перенаправления ACS возвращает сведения об ошибке приложению проверяющей стороны в качестве параметра URL-адреса HTTP в кодировке JSON. Можно включить сведения об ошибке с кодированием 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. Для выполнения управления пространством имен Access Control выберите пространство имен и щелкните Управление. (Или щелкните Пространства имен Access Control, выберите пространство имен, а затем щелкните Управление.)

  3. Нажмите приложения проверяющей стороны и выберите приложение проверяющей стороны.

  4. На странице Изменение приложения проверяющей стороны введите URL-адрес страницы ошибки в поле URL-адрес ошибки.

    ACS перенаправляет пользователя на эту страницу при возникновении ошибок входа. Кроме того, ACS отправляет параметры в кодировке JSON на эту страницу, включающую сведения об ошибке.

Шаг 2. Создание вспомогательных классов ошибок

На этом шаге создаются вспомогательные классы ошибок, которые десериализуют сообщения об ошибке с кодированием JSON.

Создание вспомогательных классов ошибок

  1. Добавьте файл класса в веб-приложение и присвойте ему имя, такое как 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

На этом шаге показано, как обрабатывать сообщения об ошибках в кодировке JSON, создаваемые ACS.

Обработка сообщения об ошибке с кодированием JSON, созданным службой ACS

  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());
    
    

    Этот код обрабатывает сообщения об ошибках в кодировке JSON из ACS.

Шаг 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. Для выполнения управления пространством имен Access Control выберите пространство имен и щелкните Управление. (Или щелкните Пространства имен Access Control, выберите пространство имен, а затем щелкните Управление.)

  3. Нажмите Группы правил и щелкните группу правил, которая связана с приложением проверяющей стороны.

  4. Предупреждение

    Следующее действие нельзя отменить. Но если вы удалите созданные правила, они могут быть снова легко созданы.

  5. На странице Изменение группы правил выберите все правила в разделе Правила, а затем нажмите Удалить выбранные правила.

  6. Выберите команду Сохранить.

  7. Вернитесь на веб-сайт и перейдите к одной из страниц с помощью браузера.

  8. Вы должны быть перенаправлены в поставщик удостоверений для проверки подлинности — Windows Live ID (учетная запись Майкрософт), Google, Facebook, Yahoo!или независимо от того, что настроено для проверяющей стороны в качестве поставщика удостоверений.

  9. После успешной проверки подлинности необходимо перенаправить обратно в ACS, что должно привести к ошибке, так как правила не определены.

  10. Эта ошибка должна отображаться на странице ошибки, созданной на шаге 2. Создание вспомогательных классов ошибок и будет выглядеть следующим образом:

    Код ошибки uri:WindowsLiveID ACS500000: произошла ошибка, выдавающая маркер.

Другой способ проверить это — отклонить согласие пользователя. Это окно отображается при входе в систему с помощью Google или Facebook.