ASP Ядро Добавить настраиваемую Претензию к Auth Токену
Вы не можете изменить маркер после его подписания IdP, так что вы можете» t добавить заявку на токен.
Я попытался с помощью IClaimsTransformer, но это, кажется неуклюжим, я не может легко добраться до UserManager от ClaimsTransformationContext.
Я думаю, ваша проблема связана с этим github issue. В целом (насколько я понимаю), если класс ClaimsTransformer
зарегистрирован как синглет, и одна из его зависимостей ограничена или преходяща, она вызывает captive dependency. В этом случае вы должны использовать шаблон «Локатор сервиса», чтобы избежать зависимости от неактивного. Ваш код может быть что-то вроде этого (от комментария @PinpointTownes'):
public async Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
var userManager= context.Context.RequestServices.GetRequiredService<UserManager>();
//
}
- Мои мысли о вашем случае -
У вас есть два основных варианта для достижения своей цели:
Добавить требование лексем, когда маркер генерируется IdP:
Вам не нужен этот метод в большинстве случаев, но если вы хотите использовать его:
- Вы должны иметь контроль над IdP, потому что этот вариант возможен на IdP (насколько я понимаю, ваш IdP и ресурсов сервера такой же, так что у вас есть контроль над IdP, но это может быть невозможно всегда).
- Вы должны позаботиться о несогласованности при использовании этой опции, поскольку требование хранится в токене и не получает каждый запрос. Таким образом, реальное значение претензии может отличаться от требования в токене (я не предпочитаю его для ролей, разрешений, групп и т. Д., Потому что эти претензии могут быть изменены в любое время).
p.s: Я не знаю, можно ли добавлять претензии к токену с Openiddict.Трансформация
Иски
На самом деле я использовал HttpContext.Items
для хранения дополнительных требований, прежде чем я открыл этот метод, и он работал хорошо для меня. Но я думаю, что лучший способ - использовать Claims Transformation
, и он вписывается в ваш случай.