Какая польза от IClaimsTransformer?
В ядре ASP.Net позволяет использовать реализацию IClaimsTransformer.
Вы регистрируете это так:
app.UseClaimsTransformation(o => o.Transformer = new MyClaimsTransformer());
Реализация
public class MyClaimsTransformer : IClaimsTransformer
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
var identity = context.Principal.Identity as ClaimsIdentity;
foreach (var claim in ci.Claims)
{
// you cannot modify claim.Type or claim.Value here
}
}
}
тем не мение ClaimsIdentity.Claims
свойство только для чтения. Также Claim.Type
, Claim.Value
свойства только для чтения.
Это означает, что в реализации IClaimsTransformer
Вы можете только добавлять новые претензии. Вы не можете удалить или изменить существующие претензии.
Так каково реальное использование IClaimsTransformer?
2 ответа
Вы заметили тип возврата? Это ClaimsPrincipal.
Вы можете создать совершенно новый ClaimsPrincipal, добавив или изменив все, что вам нравится, из существующего и вернуть его.
Его ценность в том, что вы можете дополнить претензии сверх того, что хранится в куки-файле аутентификации.
Это полезно, потому что только один объем данных может попасть в файл cookie, если вы попытаетесь поместить слишком много данных, он будет обрезан.
Поэтому, если у вас много заявок или претензий с большой полезной нагрузкой, вы можете сохранить эти данные в сеансе и добавить их в заявку, используя преобразования утверждений. Я не думаю, что он предназначен для удаления претензий, которые были сохранены в куки. Если вы хотите добавить или контролировать, какие утверждения помещаются в cookie, вы должны сделать это в пользовательском IClaimsPrincipalFactory.