Поделиться через


Практическое руководство. Реализация контроль доступа на основе ролей (RBAC) в приложении с поддержкой утверждений ASP.NET с помощью WIF и ACS

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

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

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

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

  • Windows® Identity Foundation (WIF)

  • ASP.NET

Сводка

В этом разделе объясняется, как реализовать авторизацию контроль доступа на основе ролей (RBAC) в веб-приложениях с поддержкой утверждений ASP.NET с помощью WIF и ACS.

Содержимое

  • Задачи

  • Обзор

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

  • Шаг 1. Создание простого веб-приложения ASP.NET с поддержкой утверждений

  • Шаг 2. Настройка утверждений ролей в ACS

  • Шаг 3. Реализация проверок ролей в веб-приложении ASP.NET

  • Шаг 4. Реализация преобразования утверждений с помощью настраиваемого ClaimsAuthenticationManager

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

  • Связанные элементы:

Задачи

  • Настройте утверждения ролей с помощью ACS.

  • Преобразование утверждений ролей с помощью ClaimsAuthenticationManager.

  • Реализуйте проверки управления доступом на основе ролей с помощью метода IsInRole и атрибутов PrinciaplPermission.

Обзор

Управление доступом на основе ролей (RBAC) — это широко распространенный метод ограничения доступа в приложениях. В веб-приложениях ASP.NET этот подход реализуется с помощью метода IsInRole, атрибута PrincipalPermission или требований, которые были доступны с ASP.NET 1.0. Вы можете использовать утверждения для авторизации, сохраняя при этом хорошо установленные методики при использовании новых технологий, таких как WIF и ACS. Среду выполнения WIF и пакет SDK можно скачать здесь:

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

  • Шаг 1. Создание простого веб-приложения ASP.NET с поддержкой утверждений

  • Шаг 2. Настройка утверждений ролей в ACS

  • Шаг 3. Реализация проверок ролей в веб-приложении ASP.NET

  • Шаг 4. Реализация преобразования утверждений с помощью настраиваемого ClaimsAuthenticationManager

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

Шаг 1. Создание простого веб-приложения ASP.NET с поддержкой утверждений

На этом шаге вы создадите простое веб-приложение ASP.NET, которое будет использоваться в качестве основы для реализации RBAC.

Создание простого веб-приложения ASP.NET

  1. Запустите Visual Studio с использованием параметра "Запуск от имени администратора". Это необходимо для WIF.

  2. Создайте пустое веб-приложение ASP.NET.

  3. Добавьте веб-форму ASPX и задайте ее имя, например default.aspx.

Шаг 2. Настройка утверждений ролей в ACS

На этом шаге показано, как настроить утверждения ролей на портале управления ACS с помощью групп правил. См. руководство. Реализация логики преобразования маркеров с помощью правил для полного пошагового руководства.

Настройка утверждений ролей на портале управления ACS

  1. На странице Изменение приложения проверяющей стороны прокрутите экран к разделу Группы правил и щелкните ссылку для нужной группы. Убедитесь, что она выбрана.

  2. На странице Изменение группы правил перейдите к разделу Правило и щелкните ссылку Добавить правило.

  3. На странице Добавление правила утверждения перейдите к разделу Тип выходного утверждения, щелкните переключатель Выбрать тип, а затем выберите следующий тип утверждения.

    https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    
  4. В разделе Значение выходного утверждения щелкните Ввести значение, а затем введите следующий текст в поле:
    Пользователь

  5. При необходимости (рекомендуется) добавьте описание и нажмите кнопку Сохранить.

Вы настроили утверждение роли User, которое можно добавить в любой токен. Сценарий может отличаться в зависимости от ваших требований. Дополнительные сведения о настройке более сложных правил см. в разделе "Практическое руководство. Реализация логики преобразования маркеров с помощью правил".

Шаг 3. Реализация проверок ролей в веб-приложении ASP.NET

На этом шаге показано, как реализовать RBAC.

Реализация RBAC на веб-странице ASP.NET

  1. Добавьте ссылку на сборку Microsoft.IdentityModel.

  2. Откройте код файла default.aspx.cs.

  3. Добавьте следующие инструкции using:

    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
  4. Добавьте в обработчик событий Page_Load следующее требование безопасности. Этот атрибут проверяет, назначен ли текущий пользователь роли User. Если это не так, вызывается исключение.

    [PrincipalPermission(SecurityAction.Demand, Role = "User")]
    
  5. Добавьте следующий код в обработчик событий Page_Load. Он соответствует требованию, выраженному в коде.

    PrincipalPermission p = new PrincipalPermission(null, "User");
       p.Demand();
    
  6. Добавьте следующий код в событие Page_Load. В отличие от предыдущего фрагмента кода этот фрагмент не вызывает исключение. Вместо этого IsInRole возвращает логическое значение, указывающее, назначен ли текущий пользователь указанной роли.

    if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
    
  7. Законченный код должен выглядеть примерно так:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
    namespace WebIsInRoleACS
    {
        public partial class _default : System.Web.UI.Page
        {
            //THIS SHOULD THROW AN EXCEPTION
            [PrincipalPermission(SecurityAction.Demand, Role = "User")]
            protected void Page_Load(object sender, EventArgs e)
            {
    
                //THIS SHOULD THROW AN EXCEPTION
                PrincipalPermission p = new PrincipalPermission(null, "User");
                p.Demand();
    
                //THIS RETURNS BOOL
                if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
            }
        }
    }
    

Шаг 4. Реализация преобразования утверждений с помощью настраиваемого ClaimsAuthenticationManager

Этот параметр является необязательным. На этом шаге показано, как преобразовать утверждения с помощью ClaimsAuthenticationManager, который является частью конвейера WIF, который выполняется в контексте приложения ASP.NET, в отличие от правил преобразования утверждений, выполняемых в ACS, как описано на шаге 2. Настройка утверждений ролей в ACS.

Реализация преобразования утверждений с помощью настраиваемого ClaimsAuthenticationManager

  1. Добавьте проект Библиотека классов в решение Visual Studio, и укажите для него имя, например MyClaimsTransformationModule.

  2. Добавьте ссылку на сборку Microsoft.IdentityModel.

  3. Добавьте ссылку на сборку System.IdentityModel.

  4. Создайте новый класс и укажите для него имя, например ClaimsTransformationModule.

  5. Добавьте в него следующие объявления.

    using Microsoft.IdentityModel.Claims;
    using System.Security.Principal;
    
  6. Создайте класс, производный от типа ClaimsAuthenticationManager.

  7. Переопределите метод Authenticate класса (в нем будет реализовано преобразование утверждений). Код метода Authenticate может быть основан на следующем коде.

    if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
    {
        //DECIDE ON SOME CRITERIA IF CURRENT USER DESERVES THE ROLE
        //IClaimsIdentity identity = (IClaimsIdentity)incomingPrincipal.Identity;
        ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add(
            new Claim(ClaimTypes.Role, "Admin"));
    }
    return incomingPrincipal;
    
  8. Перейдите к приложению ASP.NET и настройте ClaimsAuthenticationManager в файле web.config.

      <microsoft.identityModel>
        <service>
          <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
    
  9. Убедитесь, что приложение может найти созданную сборку. Самый простой способ — разместить ее в папке bin приложения.

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

На этом шаге показано, как проверить, работает ли решение. Нажмите кнопку F5. Веб-приложение ASP.NET должно запуститься в режиме отладки (вы можете добавить точки останова, чтобы проверить выполнение кода в Visual Studio). Сначала вы попадете на страницу проверки подлинности поставщика удостоверений, настроенного для федерации. После завершения проверки подлинности вы должны попасть на страницу Default.aspx без исключения, т. е. все необходимые требования безопасности роли User.