Создание настраиваемого расширения проверки подлинности для запуска и отправки событий коллекции атрибутов

Применяется: зеленый круг с символом белой галочки, указывающим, что следующее содержимое применяется к внешним клиентам. Внешние клиенты (дополнительные сведения)

В этой статье описывается расширение возможностей регистрации пользователей в Microsoft Entra External ID для клиентов. В пользовательских потоках регистрации клиентов прослушиватели событий можно использовать для расширения процесса сбора атрибутов на этапе их сбора и во время отправки.

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

Помимо создания настраиваемого расширения проверки подлинности для запуска и отправки событий коллекции атрибутов, необходимо создать REST API, определяющий действия рабочего процесса для каждого события. Вы можете использовать любой язык программирования, платформу и среду размещения для создания и размещения REST API. В этой статье показано краткое руководство по началу работы с функцией Azure C#. При использовании Azure Functions вы запускаете код в бессерверной среде, не создавая виртуальную машину или публикуя веб-приложение.

Предварительные условия

Шаг 1. Создание настраиваемых расширений для проверки подлинности REST API (функция Azure)

На этом шаге вы создадите API функции триггера HTTP с помощью Azure Functions. API-интерфейс функции — это источник бизнес-логики для потоков пользователей. После создания функции триггера ее можно настроить для любого из следующих событий:

  1. Войдите на портал Azure с учетной записью администратора.

  2. В меню портала Azure или на странице Home выберите Создать ресурс.

  3. Найдите и выберите приложение-функцию и нажмите кнопку "Создать".

  4. На странице "Основы" используйте параметры приложения-функции, как указано в следующей таблице:

    Настройка Предлагаемое значение Описание
    Подписка Ваша подписка Подписка, в которой будет создано новое функциональное приложение.
    Группа ресурсов Группа компаний myResourceGroup Выберите и существующую группу ресурсов или имя новой, в которой вы создадите приложение-функцию.
    Имя приложения-функции Глобально уникальное имя Имя, определяющее новое приложение-функцию. Допустимые символы: a-z (без учета регистра), 0-9 и -.
    Издавать Код Параметр для публикации файлов кода или контейнера Docker. В этом руководстве выберите Код.
    Стек среды выполнения .NET Предпочитаемый язык программирования. В этом руководстве выберите .NET.
    Версия 6 (LTS) изолировано (вне процесса) Версия среды выполнения .NET. Изолированная (внепроцессная) означает, что можно создавать и запускать функции с помощью поддерживаемой модели размещения.
    Область Предпочтительный регион Выберите регион , расположенный рядом с вами или рядом с другими службами, к которым могут обращаться ваши функции.
    Операционная система Windows Операционная система для вас выбирается заранее на основе выбранного стека среды выполнения.
    Тип плана Потребление (бессерверное) План размещения, который определяет распределение ресурсов для вашего функционального приложения.
  5. Выберите "Проверка и создание ", чтобы просмотреть выбранные параметры конфигурации приложения, а затем нажмите кнопку "Создать". Развертывание займет несколько минут.

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

1.1 Создание функций триггера HTTP

Теперь, когда вы создали приложение-функцию Azure, вы создадите функции триггера HTTP для действий, которые необходимо вызвать с помощью HTTP-запроса. Триггеры HTTP используются и вызываются пользовательским расширением проверки подлинности Microsoft Entra.

  1. На странице Overview функции приложения выберите панель Functions и выберите Создать функцию в разделе Создать на портале Azure.
  2. В окне "Создание функции " оставьте свойство среды разработки как "Разработка" на портале. В разделе "Шаблон" выберите триггер HTTP.
  3. В разделе "Сведения о шаблоне" введите CustomAuthenticationExtensionsAPI для свойства New Function .
  4. Для уровня авторизации выберите "Функция".
  5. Нажмите кнопку "Создать".

1.2. Настройка триггера HTTP для OnAttributeCollectionStart

  1. В меню выберите "Код и тест".
  2. Выберите вкладку ниже для сценария, который вы хотите реализовать: Продолжить, Блокировать или Установить значения по умолчанию. Замените код указанным фрагментом кода.
  3. После замены кода в верхнем меню выберите "Получить URL-адрес функции" и скопируйте URL-адрес. Этот URL-адрес используется в шаге 2: создайте и зарегистрируйте настраиваемое расширение проверки подлинности для целевого URL-адреса.

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

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);


    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionStart.continueWithDefaultBehavior"}
    };

    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionStartResponseData",
        actions= actions
    };

    dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
}

1.3. Настройка триггера HTTP для OnAttributeCollectionSubmit

  1. В меню выберите "Код и тест".
  2. Перейдите на вкладку ниже для сценария, который вы хотите реализовать: "Продолжить", " Блокировать", "Изменить значения" или "Ошибка проверки". Замените код указанным фрагментом кода.
  3. После замены кода в верхнем меню выберите "Получить URL-адрес функции" и скопируйте URL-адрес. Этот URL-адрес используется в шаге 2: создайте и зарегистрируйте настраиваемое расширение проверки подлинности для целевого URL-адреса.

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

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);
    
    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionSubmit.continueWithDefaultBehavior"}
    };
						
    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionSubmitResponseData",
        actions= actions
    };
	    
	dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
	public string type { get; set; }
}

Шаг 2. Создание и регистрация настраиваемого расширения проверки подлинности

На этом шаге вы регистрируете настраиваемое расширение для проверки подлинности, которое Microsoft Entra ID использует для вызова функции Azure. Расширение пользовательской аутентификации содержит информацию о вашей конечной точке REST API, действиях начала и отправки сбора атрибутов, которые оно обрабатывает из вашего REST API, и о том, как выполнить аутентификацию в REST API.

  1. Войдите в центр администрирования Microsoft Entra как минимум администратор Application Admin и Authentication Admin.

  2. Перейдите к Entra ID>External Identities>расширениям пользовательской проверки подлинности.

  3. Выберите "Создать пользовательское расширение".

  4. В разделе "Основы" выберите событие AttributeCollectionStart или событие AttributeCollectionSubmit, а затем нажмите кнопку "Далее". Убедитесь, что это соответствует конфигурации на предыдущем шаге.

  5. В конфигурации конечной точки заполните следующие свойства:

    • Имя — название для вашего пользовательского расширения проверки подлинности. Например, событие «Сбор атрибутов».
    • Target Url{Function_Url} URL-адреса вашей функции Azure.
    • Описание — описание пользовательских расширений проверки подлинности.
  6. Нажмите кнопку "Далее".

  7. В разделе "Проверка подлинности API" выберите параметр "Создать новое приложение" , чтобы создать регистрацию приложения, представляющего приложение-функцию.

  8. Присвойте приложению имя, например Azure Functions API событий проверки подлинности.

  9. Нажмите кнопку "Далее".

  10. Выберите Создать, что создаёт настраиваемое расширение проверки подлинности и связанную регистрацию приложения.

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

  1. Перейдите к Entra ID>External Identities>расширениям пользовательской проверки подлинности.
  2. Выберите расширение пользовательской проверки подлинности из списка.
  3. На вкладке "Обзор" нажмите кнопку "Предоставить разрешение" , чтобы предоставить администратору согласие зарегистрированного приложения. Расширение настраиваемой проверки подлинности использует client_credentials для аутентификации в функциональном приложении Azure с помощью разрешения Receive custom authentication extension HTTP requests. Нажмите кнопку "Принять".

Шаг 3. Добавление настраиваемого расширения проверки подлинности в поток пользователя

Теперь можно связать пользовательское расширение проверки подлинности с одним или несколькими потоками пользователей.

Примечание.

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

3.1 Добавление настраиваемого расширения проверки подлинности в существующий поток пользователя

  1. Войдите в центр администрирования Microsoft Entra как минимум в качестве Администратора приложения и Администратора аутентификации

  2. Если у вас есть доступ к нескольким клиентам, используйте значок "Параметры" в верхнем меню, чтобы переключиться на внешний клиент.

  3. Перейдите к Entra ID>External Identities>User flows.

  4. Выберите пользовательский поток из списка.

  5. Выберите пользовательские расширения проверки подлинности.

  6. На странице расширений пользовательской проверки подлинности можно связать расширение пользовательской проверки подлинности с двумя различными шагами в потоке пользователя:

    • Перед сбором сведений от пользователя связан с событием OnAttributeCollectionStart . Выберите карандаш редактирования. Будут отображаться только пользовательские расширения, настроенные для события OnAttributeCollectionStart . Выберите приложение, настроенное для события запуска коллекции атрибутов, и нажмите кнопку "Выбрать".
    • Когда пользователь отправляет свои сведения, это связано с событием OnAttributeCollectionSubmit. Будут отображаться только пользовательские расширения, настроенные для события OnAttributeCollectionSubmit . Выберите приложение, которое вы настроили для события отправки коллекции атрибутов, и затем нажмите Выбрать.
  7. Убедитесь, что приложения, перечисленные рядом с обоими шагами сбора атрибутов, верны.

  8. Щелкните значок "Сохранить ".

Шаг 4. Тестирование приложения

Чтобы получить маркер и проверить пользовательское расширение проверки подлинности, можно использовать https://jwt.ms приложение. Это веб-приложение, принадлежащее компании Microsoft, которое отображает декодированное содержимое токена (содержимое токена никогда не покидает ваш браузер).

Выполните следующие действия, чтобы зарегистрировать веб-приложение jwt.ms :

4.1 Регистрация веб-приложения jwt.ms

  1. Войдите в центр администрирования Microsoft Entra как минимум как Администратор приложений.
  2. Перейдите к Entra ID>Регистрации приложений.
  3. Выберите "Создать регистрацию".
  4. Введите имя приложения. Например, мое тестовое приложение.
  5. В разделе "Поддерживаемые типы учетных записей" выберите только учетные записи в этом каталоге организации.
  6. В раскрывающемся списке "Выбор платформы" в URI перенаправления выберите веб-сайт и введите https://jwt.ms в текстовое поле URL-адреса.
  7. Нажмите кнопку "Регистрация", чтобы завершить регистрацию приложения.

4.2 Получение идентификатора приложения

В разделе "Обзор скопируйте идентификатор приложения (клиента). Идентификатор приложения упоминается как <client_id> на следующих этапах. В Microsoft Graph это свойство называется appId.

4.3 Включение неявного потока

Тестовое приложение jwt.ms использует неявный поток. Включите неявный поток в регистрации приложения My Test , выполнив следующие действия.

Внимание

Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Поток проверки подлинности, используемый для тестирования в этой процедуре, требует очень высокого уровня доверия к приложению и несет риски, которые отсутствуют в других потоках. Этот подход не следует использовать для проверки подлинности пользователей в рабочих приложениях (дополнительные сведения).

  1. В разделе "Управление" выберите "Проверка подлинности".
  2. В разделе "Неявное предоставление" и "Гибридные потоки" выберите флажок "Токены ID (используются для неявных и гибридных потоков)".
  3. Нажмите кнопку "Сохранить".

Шаг 5. Защита функции Azure

Microsoft Entra пользовательское расширение проверки подлинности использует серверный поток для получения маркера доступа, который отправляется в заголовке HTTP Authorization в вашу функцию Azure. При публикации функции в Azure, особенно в рабочей среде, необходимо проверить маркер, отправленный в заголовке авторизации.

Чтобы защитить функцию Azure, выполните следующие действия для интеграции аутентификации Microsoft Entra. Это позволит проверять входящие токены с использованием API событий аутентификации Azure Functions регистрации приложения.

Примечание.

Если приложение-функция Azure размещается в другом клиенте Azure, отличном от клиента, в котором зарегистрировано пользовательское расширение проверки подлинности, пропустите к шагу 5.1 Использование поставщика идентификации OpenID Connect.

5.1 Добавление поставщика удостоверений в функцию Azure

  1. Войдите на портал Azure.

  2. Перейдите и выберите приложение-функцию, которое вы ранее опубликовали.

  3. Выберите проверку подлинности в меню слева.

  4. Выберите Добавить поставщика удостоверений.

  5. Выберите Корпорацию Майкрософт в качестве поставщика удостоверений.

  6. Выберите "Клиент" в качестве типа клиента.

  7. В разделе регистрация приложений введите client_id регистрации приложения API событий аутентификации Azure Functions, которую вы создали ранее, при регистрации пользовательского поставщика утверждений.

  8. Для URL-адреса издателя введите следующий URL-адресhttps://{domainName}.ciamlogin.com/{tenant_id}/v2.0, где

    • {domainName} — это доменное имя внешнего клиента.
    • {tenantId} — это идентификатор внешнего арендатора. Пользовательский модуль проверки подлинности должен быть зарегистрирован здесь.
  9. В разделе "Неавторизованные запросы" выберите HTTP 401 Unauthorized как поставщика удостоверений.

  10. Отмените выбор параметра хранилища токенов .

  11. Выберите Add, чтобы добавить проверку подлинности в функцию Azure.

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

5.2 Использование поставщика удостоверений OpenID Connect

Если вы настроили Step 5: защитите функцию Azure, пропустите этот шаг. В противном случае, если функция Azure размещена в другом клиенте, отличном от клиента, в котором зарегистрировано пользовательское расширение проверки подлинности, выполните следующие действия, чтобы защитить функцию:

  1. Войдите на портал Azure, затем перейдите к и выберите ранее опубликованное функциональное приложение.

  2. Выберите проверку подлинности в меню слева.

  3. Выберите Добавить поставщика удостоверений.

  4. Выберите OpenID Connect в качестве поставщика удостоверений.

  5. Укажите имя, например Contoso Microsoft Entra ID.

  6. В разделе записи метаданных введите следующий URL-адрес в URL-адрес документа. Замените {tenantId} идентификатором клиента Microsoft Entra.

    https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration
    
  7. В разделе Регистрация приложений введите идентификатор приложения (идентификатор клиента) регистрации приложения Azure Functions API событий аутентификации, которое вы ранее создали.

  8. В центре администрирования Microsoft Entra:

    1. Выберите регистрацию приложения для API событий аутентификации Azure Functions, которую вы создали ранее.
    2. Выберите сертификаты и секреты>секреты клиента>Новый секрет клиента.
    3. Добавьте описание секрета клиента.
    4. Выберите срок действия секрета или укажите настраиваемое время существования.
    5. Нажмите кнопку "Добавить".
    6. Запишите значение секрета для использования в коде клиентского приложения. Это значение секрета больше нигде не отображается после закрытия страницы.
  9. Вернитесь к функции Azure и в разделе Регистрация приложений введите секрет клиента.

  10. Отмените выбор параметра хранилища токенов .

  11. Выберите "Добавить ", чтобы добавить поставщика удостоверений OpenID Connect.

Шаг 6. Тестирование приложения

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

  1. Откройте новый частный браузер и перейдите по следующему URL-адресу:

    https://<domainName>.ciamlogin.com/<tenant_id>/oauth2/v2.0/authorize?client_id=<client_id>&response_type=code+id_token&redirect_uri=https://jwt.ms&scope=openid&state=12345&nonce=12345
    
    • Замените <domainName> своим именем внешнего клиента и замените <tenant-id> его идентификатором внешнего клиента.
    • Замените <client_id> идентификатором приложения, добавленного в поток пользователя.
  2. После входа вы увидите декодированный токен в https://jwt.ms.

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