Претензии клиентов не проверяются Политикой - PullRequest
0 голосов
/ 07 августа 2020

У нас есть система, которая использует C# Core 2.1, IdentityServer4 и Identity для аутентификации пользователей. Различные другие проекты используют систему для авторизации. Я могу создавать политики в своем API, которые проверяют заявки пользователей; и использовать эти политики для защиты ресурсов. Я добавляю аналогичный код в API Sartup.cs:

services.AddAuthorization(options =>
  {
    options.AddPolicy("example",
      policy => policy.RequireClaim("claim", "data"));
  });

И добавляю следующий код перед моим контроллером API или заданием c задачи:

[Authorize(policy: "example")]

Мы использовали эта система давно. Теперь мы хотим заблокировать действие, чтобы его мог выполнять только конкретный клиент c (а не его пользователи). Но утверждения, полученные с помощью типа предоставления client_credentials, либо не добавляются к токену доступа, либо не отображаются службой авторизации.

Есть ли способ узнать, какие утверждения содержатся в токене, когда он не есть openid в качестве области действия?

Если заявка есть, почему служба авторизации не может ее увидеть?

Есть ли другая альтернатива? Мы хотим заблокировать действие, чтобы его могли выполнять только сами клиентские приложения.

1 Ответ

0 голосов
/ 07 августа 2020

Во-первых, вы всегда можете захватить необработанные токены, используя Fiddler , чтобы увидеть, какие утверждения фактически передаются получателю токенов. Затем проверьте в User (ClaimsPrincipal), созданном обработчиком аутентификации, какие утверждения он содержит.

Затем вам необходимо явно сопоставить / добавить отсутствующие утверждения, чтобы ожидаемые утверждения попали в объект пользователя ClaimsPrincipal. Некоторые претензии при этом удаляются по умолчанию.

...