Какая польза от 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.

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