Как добавить кастомные утверждения в токен azure b2c с помощью коннекторов api и веб-api asp net core
У меня есть пользовательский поток B2C_1_singupsingin1 Я добавил api connector, встроил его в этот поток и указал URL-адрес конечной точки для вызова API. Использовал статью https://docs.microsoft.com/en-us/azure/active-directory-b2c/add-api-connector-token-enrichment?pivots=b2c-user-flow
Из статьи понятно, что коннектор API материализуется как HTTP- запрос POST , отправляя пользовательские атрибуты.
В моем веб апи есть конечная точка с кодом:
[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 };
}
Когда я запускаю пользовательский поток, все работает, я попадаю в эту конечную точку в апи.
Но есть проблема JsonElement body не содержит пользовательских атрибутов. Внутри я вижу body.ValueKind = Undefined.
Подскажите, что я делаю не так?
Так же, после всего, я хотел бы добавить кастомное утверждение "userId" с каким-то значением из моей базы данных. Чтобы оно содержалось в выпущенном в последствии токене. Будет ли код выше правильным, для этого?
Ответы (1 шт):
Решил проблему давно, но может мой опыт кому-то поможет. Первая часть вопроса:
JsonElement body не содержит пользовательских атрибутов. Внутри я вижу body.ValueKind = Undefined.
В чем была проблема. Для поддержки запросов HTTP Patch я добавил в Startup пакет и конфигурацию NewtonsoftJson:
services.AddControllers().AddNewtonsoftJson(x =>
{
x.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
Но я не учел, что AddNewtonsoftJson заменяет основанные на System.Text.Json средства форматирования ввода и вывода, используемые для форматирования всего содержимого JSON. Из-за этого у меня возникла вышеуказанная проблема. Решение из документации microsoft
По второй части вопроса. Для добавления кастомного утверждения, вы просто должны добавить extension_ префикс к утверждению.