Как обогатить токен azure b2c настраиваемыми утверждениями с помощью коннекторов api и веб-api asp net core

У меня есть пользовательский поток B2C_1_singupsingin1. Я добавил соединитель api, встроил его в этот поток и URL-адрес конечной точки для вызова API. Использованная статья:https://docs.microsoft.com/en-us/azure/active-directory-b2c/add-api-connector-token-enrichment?pivots=b2c-user-flow

Из статьи ясно, что коннектор API материализуется как HTTP-запрос POST, отправляющий настраиваемые атрибуты.

У моего веб-API есть конечная точка с кодом:

      [HttpPost("enrich")]
public IActionResult Enrich([FromBody] JsonElement body)
{
    var responseProperties = new Dictionary<string, object> //for example
    {
        { "version", "1.0.0" },
        { "action", "Continue" },
        { "postalCode", "12349" },
        { "userId", 123 } 
    };

    return new JsonResult(responseProperties) { StatusCode = 200 };
}

Когда я запускаю собственный поток, все работает, я перехожу к этой конечной точке в api. Но есть проблема, что тело JsonElement не содержит настраиваемых атрибутов. Внутри я вижу body.ValueKind = Undefined. Подскажите, что я делаю не так?

Кроме того, в конце концов, я хотел добавить настраиваемое утверждение «userId» с некоторым значением из моей базы данных. Чтобы он содержался в токене, выпущенном в последующем. Подойдет ли для этого приведенный выше код?

2 ответа

Ваш код в порядке. Просто добавьте « extension_ » перед почтовым кодом и идентификатором пользователя.

          [HttpPost("log")]
    public IActionResult Log([FromBody] JsonElement body)
    {

        var responseProperties = new Dictionary<string, object> 
        {
            { "version", "1.0.0" },
            { "action", "Continue" },
            { "extension_Role", "admin" },
        };

        return new JsonResult(responseProperties) { StatusCode = 200 };
    }

В моем Azure AD B2C у меня есть настраиваемый атрибут под названием «Роль».

Но в режиме отладки я увидел, что для всех пользовательских атрибутов extension_ устанавливается как префикс...

Итак, добавив это в responseProperties, похоже, это работает.

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

«Тело JsonElement не содержит настраиваемых атрибутов. Внутри я вижу body.ValueKind = Undefined»

В чем была проблема. Для поддержки HTTP-запросов Patch я добавил пакет и конфигурацию NewtonsoftJson в Startup:

      services.AddControllers().AddNewtonsoftJson(x => 
{
   x.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});

Но я не учел, что AddNewtonsoftJson заменяет средства форматирования ввода и вывода на основе System.Text.Json, используемые для форматирования всего содержимого JSON. Из-за этого у меня возникла вышеуказанная проблема. Решение из документации Microsoft

Решение второй части вопроса с кастомными претензиями предоставил Steffen . Вам просто нужно добавить префикс extension_ к претензиям.

Другие вопросы по тегам