Учебник. Назначение настраиваемых ролей с помощью функции и Microsoft Graph

В этой статье показано, как использовать функцию для запроса к Microsoft Graph и назначения настраиваемых ролей пользователю на основе его членства в группах Active Directory.

Из этого руководства вы узнаете, как:

  • Развертывание статического веб-приложения.
  • Создайте регистрацию приложения Microsoft Entra.
  • Настройте пользовательскую проверку подлинности с помощью идентификатора Microsoft Entra.
  • Настройка бессерверной функции, которая запрашивает членство пользователя в группах Active Directory и возвращает список настраиваемых ролей.

Примечание.

При работе с этим учебником необходимо использовать функцию для назначения ролей. Сейчас возможность управления ролями на основе функций доступна в предварительной версии. Уровень разрешений, необходимый для выполнения этого руководства, — User.Read.All.

В API приложения есть функция с именем GetRoles . Эта функция использует маркер доступа пользователя для запроса Active Directory из Microsoft Graph. Если пользователь является членом всех групп, определенных в приложении, соответствующие пользовательские роли сопоставляются с пользователем.

Необходимые компоненты

Требование Комментарии
Активная учетная запись Azure Если ее нет, можно создать учетную запись бесплатно.
Разрешения Microsoft Entra Необходимо иметь достаточные разрешения для создания приложения Microsoft Entra.

Создание репозитория GitHub

  1. Создайте репозиторий на основе шаблона функции ролей. Перейдите к следующему расположению, чтобы создать новый репозиторий.

    https://github.com/staticwebdev/roles-function/generate

  2. Назовите репозиторий my-custom-roles-app.

  3. Щелкните Create repository from template (Создание репозитория из шаблона).

Развертывание статического веб-приложения в Azure

  1. В новом окне браузера откройте портал Azure.

  2. В левом верхнем углу выберите "Создать ресурс".

  3. В поле поиска введите статические веб-приложения.

  4. Выберите Статические веб-приложения.

  5. Нажмите кнопку создания.

  6. Настройте статическое веб-приложение со следующими сведениями:

    Параметр Значение Примечания.
    Отток подписок Выберите свою подписку Azure.
    Группа ресурсов Создайте новую группу с именем my-custom-role-app-group.
    Имя. my-custom-roles-app
    Тип плана Стандартные Настройка проверки подлинности и назначение ролей с помощью функции требует стандартного плана.
    Регион для API Выберите ближайший к вам регион.
  7. В разделе сведений о развертывании:

    Параметр Значение
    Оригинал Выберите GitHub.
    Организация Выберите организацию, в которой вы создали репозиторий.
    Репозиторий Выберите my-custom-role-app.
    Ветвь Выберите Main.
  8. В разделе "Сведения о сборке" добавьте сведения о конфигурации для этого приложения.

    Параметр Значение Примечания.
    Предварительно заданные параметры сборок Выберите Пользовательский.
    Расположение приложения Введите /frontend. Эта папка содержит интерфейсное приложение.
    Расположение API /api Папка в репозитории, содержащая функции API.
    Расположение вывода Не указывайте. Это приложение не имеет выходных данных сборки.
  9. Выберите Review + create (Просмотреть и создать).

  10. Выберите " Создать" инициализацию первого развертывания.

  11. После завершения процесса выберите "Перейти к ресурсу ", чтобы открыть новое статическое веб-приложение.

  12. В разделе "Обзор" выберите URL-адрес своего приложения. Скопируйте это значение в текстовый редактор, чтобы использовать в предстоящих шагах по настройке проверки подлинности Active Directory.

Создание приложения Microsoft Entra

  1. В портал Azure найдите и перейдите к идентификатору Microsoft Entra.

  2. В меню "Управление" выберите Регистрация приложений.

  3. Выберите "Создать регистрацию" , чтобы открыть окно "Регистрация приложения ". Введите следующие значения:

    Параметр Значение Примечания.
    Имя. Введите MyStaticWebApp.
    Поддерживаемые типы счетов Установите флажок Учетные записи только в этом каталоге организации.
    URI-адрес перенаправления Выберите веб-сайт и введите URL-адрес обратного вызова проверки подлинности Microsoft Entra статического веб-приложения. <YOUR_SITE_URL>/.auth/login/aad/callback Замените <YOUR_SITE_URL> URL-адрес статического веб-приложения. Этот URL-адрес копируется в текстовый редактор на предыдущем шаге.

    Create an app registration

  4. Выберите Зарегистрировать.

  5. После создания регистрации приложения скопируйте идентификатор приложения (арендатора) и идентификатор каталога (арендатора) из раздела Основные компоненты в текстовый редактор.

    Эти значения требуются для настройки проверки подлинности Active Directory в статическом веб-приложении.

Включение маркеров идентификаторов

  1. В параметрах регистрации приложения выберите "Проверка подлинности " в разделе "Управление".

  2. В разделе Неявное предоставление разрешения и гибридные потоки выберите Маркеры идентификации (используемые для неявных и гибридных потоков).

    Среда выполнения Статические веб-приложения требует этой конфигурации для проверки подлинности пользователей.

  3. Выберите Сохранить.

Создание секрета клиента

  1. В параметрах регистрации приложения выберите сертификаты и секреты в разделе "Управление".

  2. В разделе Секреты клиента выберите Создать секрет клиента.

  3. В поле "Описание" введите MyStaticWebApp.

  4. В поле "Срок действия" оставьте значение по умолчанию 6 месяцев.

    Примечание.

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

  5. Выберите Добавить.

  6. Скопируйте значение секрета клиента, созданного в текстовый редактор.

    Это значение необходимо для настройки проверки подлинности Active Directory в статическом веб-приложении.

    Create a client secret

Настройка проверки подлинности Active Directory

  1. В браузере откройте репозиторий GitHub, содержащий статическое веб-приложение, которое вы развернули.

    Перейдите к файлу конфигурации приложения на интерфейсе или staticwebapp.config.json. Этот файл содержит следующий раздел:

    "auth": {
      "rolesSource": "/api/GetRoles",
      "identityProviders": {
        "azureActiveDirectory": {
          "userDetailsClaim": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
          "registration": {
            "openIdIssuer": "https://login.microsoftonline.com/<YOUR_AAD_TENANT_ID>",
            "clientIdSettingName": "AAD_CLIENT_ID",
            "clientSecretSettingName": "AAD_CLIENT_SECRET"
          },
          "login": {
            "loginParameters": [
              "resource=https://graph.microsoft.com"
            ]
          }
        }
      }
    },
    

    Эта конфигурация состоит из следующих параметров:

    Свойства Description
    rolesSource URL-адрес, в котором процесс входа получает список доступных ролей. Для примера приложения используется /api/GetRolesURL-адрес.
    userDetailsClaim URL-адрес схемы, используемой для проверки запроса на вход.
    openIdIssuer Маршрут входа Microsoft Entra, добавленный с идентификатором клиента.
    clientIdSettingName Идентификатор клиента Microsoft Entra.
    clientSecretSettingName Значение секрета клиента Microsoft Entra.
    loginParameters Чтобы получить маркер доступа для Microsoft Graph, в поле loginParameters нужно указать resource=https://graph.microsoft.com.
  2. Нажмите кнопку "Изменить", чтобы обновить файл.

  3. Обновите значение https://login.microsoftonline.com/<YOUR_AAD_TENANT_ID> openIdIssuer, заменив <YOUR_AAD_TENANT_ID> его идентификатором каталога (клиента) идентификатора Microsoft Entra.

  4. Выберите " Зафиксировать изменения...".

  5. Введите сообщение фиксации и нажмите кнопку "Зафиксировать изменения".

    Фиксация этих изменений инициирует запуск GitHub Actions для обновления статического веб-приложения.

  6. Перейдите к ресурсу статического веб-приложения в портал Azure.

  7. Выберите в меню пункт Конфигурация.

  8. Добавьте следующие параметры в разделе Параметры приложения:

    Имя. Значение
    AAD_CLIENT_ID Идентификатор приложения Active Directory (клиента).
    AAD_CLIENT_SECRET Значение секрета клиента приложения Active Directory.
  9. Выберите Сохранить.

Создание ролей

  1. Откройте регистрацию приложения Active Directory в портал Azure.

  2. В разделе "Управление" выберите роли приложения.

  3. Выберите " Создать роль приложения" и введите следующие значения:

    Параметр Значение
    Отображаемое имя Введите администратора.
    Разрешенные типы элементов Выберите пользователей или групп.
    Значение Введите администратора.
    Description Введите Администратор istrator.
  4. Установите флажок для включения этой роли приложения?

  5. Нажмите Применить.

  6. Теперь повторите тот же процесс для роли с именем читателя.

  7. Скопируйте значения идентификатора для каждой роли и задайте их в текстовом редакторе.

Проверка настраиваемых ролей

Пример приложения содержит функцию API (API/GetRoles/index.js), которая запрашивает Microsoft Graph, чтобы определить, находится ли пользователь в предопределенной группе.

На основе членства пользователя в группах функция назначает пользователю настраиваемые роли. Приложение настроено для ограничения определенных маршрутов на основе этих настраиваемых ролей.

  1. В репозитории GitHub перейдите к функции GetRoles, расположенной в api/GetRoles/index.js.

    В верхней части окна есть roleGroupMappings объект, который сопоставляет пользовательские роли пользователей с группами Microsoft Entra.

  2. Выберите Изменить.

  3. Обновите объект с идентификаторами групп из клиента Microsoft Entra.

    Например, если у вас есть группы с идентификаторами 6b0b2fff-53e9-4cff-914f-dd97a13bfbd6 и b6059db5-9cef-4b27-9434-bb793aa31805, измените объект следующим образом:

    const roleGroupMappings = {
      'admin': '6b0b2fff-53e9-4cff-914f-dd97a13bfbd6',
      'reader': 'b6059db5-9cef-4b27-9434-bb793aa31805'
    };
    

    Функция GetRoles вызывается всякий раз, когда пользователь успешно проходит проверку подлинности с помощью идентификатора Microsoft Entra. Функция использует маркер доступа пользователя для запроса членства в группе Active Directory из Microsoft Graph. Если пользователь является членом всех групп, определенных в объекте roleGroupMappings , возвращаются соответствующие пользовательские роли.

    В приведенном выше примере, если пользователь является членом группы Active Directory с идентификатором b6059db5-9cef-4b27-9434-bb793aa31805, он получает reader роль.

  4. Выберите " Зафиксировать изменения...".

  5. Добавьте сообщение фиксации и нажмите кнопку "Зафиксировать изменения".

    Внесение этих изменений инициирует сборку для обновления статического веб-приложения.

  6. После завершения развертывания можно проверить изменения, перейдя по URL-адресу приложения.

  7. Войдите в статическое веб-приложение с помощью идентификатора Microsoft Entra.

  8. При входе в систему в примере приложения отображается список ролей, назначенных на основе членства в группе Active Directory удостоверения.

    В зависимости от этих ролей разрешено или запрещено получать доступ к некоторым маршрутам в приложении.

Примечание.

Некоторые запросы к Microsoft Graph возвращают несколько страниц данных. Если требуется несколько запросов, Microsoft Graph возвращает @odata.nextLink свойство в ответе, содержащее URL-адрес следующей страницы результатов. Дополнительные сведения см. в разделе "Разбиение данных Microsoft Graph" в приложении

Очистка ресурсов

Очистите развернутые ресурсы, удалив группу ресурсов.

  1. На портале Azure в меню слева выберите Группа ресурсов.

  2. В поле Фильтровать по имени введите имя группы ресурсов.

  3. Выберите имя группы ресурсов, созданной при работе с этим учебником.

  4. В главном меню выберите Удалить группу ресурсов.

Следующие шаги