Как обогатить токен 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_ к претензиям.