Что такое претензии? Когда вы их используете?

Проще говоря, утверждение — это структура данных, которая содержит значение ключа.

Ключ — это любая строка, которая однозначно идентифицирует что-то (называемое ClaimType), а значение — это ее значение. Вот и все.

Но претензии соответствуют идентификатору пользователя.

Претензии содержат информацию о Пользователе, который делает запрос на информацию, или о Клиенте, который делает вызов.

В ASP.NET Core утверждения устанавливаются промежуточным программным обеспечением проверки подлинности.

Когда пользователь или клиент делает запрос к веб-API вместе с токеном JWT, ПО промежуточного слоя аутентификации анализирует токен и проверяет подлинность.

Если проверка прошла успешно, он десериализует раздел полезных данных токена, который является объектом JSON, и создает коллекцию утверждений со свойствами JSON полезных данных в качестве ключевых значений.

Затем из коллекции утверждений создается ClaimsIdentity, а затем объект Principal.

Этот субъект привязан к пользовательскому контексту, который будет доступен, когда мы получим к нему доступ в наших методах контроллера или в любом месте после промежуточного программного обеспечения аутентификации.

Иерархия доступа примерно такая:

HttpContext -> User -> Identity -> Claims -> Claim(ClaimType, ClaimValue)

Коллекция Claims разработана как IEnumerable объектов Claim, а не как Dictionary. Почему?

Это связано с тем, что существует вероятность того, что типы утверждений могут дублироваться.

Например, если у пользователя есть несколько ролей в системе, то в документе JSON у вас будет несколько свойств ключевой роли.

Если бы коллекция Claims была словарем, она бы не поддерживала этот сценарий.

Следовательно, вы обычно выполняете цикл или применяете запросы Linq к коллекции и извлекаете необходимую информацию о заявке запрашивающего пользовательского контекста.

var rolesOfAuthenticatedUser = _httpContextAccessor.HttpContext.User.Identity.Claims.Where(_ => _.Type == "Role").Select(_ => _.Value);

Для методов модульного тестирования, использующих Claims, вы можете смоделировать IHttpContextAccessor и настроить свойство Claims с помощью упомянутой выше иерархии.

Прочтите мою статью о том, как реализовать авторизацию с помощью .NET — https://codingramen.com/blog/how-to-authorize-requests-in-asp-net-core-web-api/

Подпишитесь на мою рассылку и получайте уведомления — https://codingramen.substack.com/