Практическое руководство. Использование 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-адрес ошибки для проверяющей стороны
Перейдите на портал управления Microsoft Azure (https://manage.WindowsAzure.com), войдите в систему и щелкните Active Directory. (Совет по устранению неполадок: элемент Active Directory отсутствует или недоступен)
Для выполнения управления пространством имен Access Control выберите пространство имен и щелкните Управление. (Или щелкните Пространства имен Access Control, выберите пространство имен, а затем щелкните Управление.)
Нажмите приложения проверяющей стороны и выберите приложение проверяющей стороны.
На странице Изменение приложения проверяющей стороны введите URL-адрес страницы ошибки в поле URL-адрес ошибки.
ACS перенаправляет пользователя на эту страницу при возникновении ошибок входа. Кроме того, ACS отправляет параметры в кодировке JSON на эту страницу, включающую сведения об ошибке.
Шаг 2. Создание вспомогательных классов ошибок
На этом шаге создаются вспомогательные классы ошибок, которые десериализуют сообщения об ошибке с кодированием JSON.
Создание вспомогательных классов ошибок
Добавьте файл класса в веб-приложение и присвойте ему имя, такое как Error.cs.
Реализуйте класс Error следующим образом.
public class Error { public string errorCode { get; set; } public string errorMessage { get; set; } }
Добавьте другой файл класса и присвойте ему имя, например ErrorDetails.cs.
Реализуйте класс 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
Добавьте веб-страницу ASPX в приложение ASP.NET и присвойте ей имя, такое как ErrorPage.aspx.
Добавьте следующие элементы управления метки к разметке ASP.NET.
<asp:Label ID="lblIdntityProvider" runat="server"></asp:Label> <asp:Label ID="lblErrorMessage" runat="server"></asp:Label>
Перейдите в файл кода программной части страницы ErrorPge.aspx.cs.
Добавьте в верхнюю часть следующее объявление.
using System.Web.Script.Serialization;
Добавьте следующий код в метод 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-команд. Более подробно этот вопрос рассматривается в следующих ресурсах:
-
Практическое руководство. Предотвращение межстраничного скрипта в ASP.NET (https://go.microsoft.com/fwlink/?LinkID=178708).
-
Практическое руководство. Защита от атак путем внедрения в ASP.NET (https://go.microsoft.com/fwlink/?LinkID=157572).
-
Практическое руководство. Защита от внедрения SQL в ASP.NEThttps://go.microsoft.com/fwlink/?LinkID=212978.
Настройка анонимного доступа к странице ошибки
Откройте файл web.config приложения и добавьте следующую запись.
<location path="ErrorPage.aspx"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
Это гарантирует, что доступ к странице не будет вызывать бесконечного цикла перенаправлений.
Шаг 5. Тестирование работы
Этот шаг проверяет настройку и реализацию URL-адреса ошибки.
Включение функции URL-адрес ошибки для проверяющей стороны
Перейдите на портал управления Microsoft Azure (https://manage.WindowsAzure.com), войдите в систему и щелкните Active Directory. (Совет по устранению неполадок: элемент Active Directory отсутствует или недоступен)
Для выполнения управления пространством имен Access Control выберите пространство имен и щелкните Управление. (Или щелкните Пространства имен Access Control, выберите пространство имен, а затем щелкните Управление.)
Нажмите Группы правил и щелкните группу правил, которая связана с приложением проверяющей стороны.
-
Предупреждение
Следующее действие нельзя отменить. Но если вы удалите созданные правила, они могут быть снова легко созданы.
На странице Изменение группы правил выберите все правила в разделе Правила, а затем нажмите Удалить выбранные правила.
Выберите команду Сохранить.
Вернитесь на веб-сайт и перейдите к одной из страниц с помощью браузера.
Вы должны быть перенаправлены в поставщик удостоверений для проверки подлинности — Windows Live ID (учетная запись Майкрософт), Google, Facebook, Yahoo!или независимо от того, что настроено для проверяющей стороны в качестве поставщика удостоверений.
После успешной проверки подлинности необходимо перенаправить обратно в ACS, что должно привести к ошибке, так как правила не определены.
Эта ошибка должна отображаться на странице ошибки, созданной на шаге 2. Создание вспомогательных классов ошибок и будет выглядеть следующим образом:
Код ошибки uri:WindowsLiveID ACS500000: произошла ошибка, выдавающая маркер.
Другой способ проверить это — отклонить согласие пользователя. Это окно отображается при входе в систему с помощью Google или Facebook.