Я понимаю, о чем вы. Но клиенты не являются пользователями, поэтому вы не можете назначать роли клиенту.
Давайте сделаем шаг назад. Ресурс - это то, что вы хотите защитить. В IdentityServer вы можете дать ресурсу логическое имя, потому что у вас может быть несколько API, которые являются частью одного ресурса. И, что менее очевидно, у ресурса есть как минимум одна область видимости. В примерах ресурс имеет имя Api1 и область действия Api1.
Клиент может получить доступ к ресурсу только в том случае, если для него настроена хотя бы одна разрешенная область. Потому что это имя api, которое используется для доступа к ресурсу.
Чтобы ограничить доступ на основе областей, вам необходимо протестировать области, включенные в токен. И это ключевой момент: вместо использования ролей вы должны использовать политики, соответствующие области действия. В вашем автозагрузке:
services.AddAuthorization(option =>
{
option.AddPolicy("testing", p => p.RequireScope("myapp.test"));
});
И в контроллере:
[Authorize("testing")]
public class TestController : ControllerBase {}
Обратите внимание: части, которые не защищены политиками, подобными приведенным выше, позволят всем клиентам, у которых есть хотя бы одна область действия ресурс, независимо от его области действия.
Я предлагаю вам разделить ваш ресурс на логические части (области) и настроить клиентов, чтобы определить, какой клиент может получить доступ к какой области (части ресурса).
Тип клиента не имеет значения. Это работает для типа предоставления учетных данных клиента, но также и с интерактивными клиентами. Хотя в этом случае доступ может быть ограничен авторизацией пользователя.
Что касается отслеживания пользователей. Для интерактивных клиентов пользователь доступен в дополнительном требовании. С авторизацией пользователя вы можете использовать роли.
Для потока учетных данных клиента такая информация должна быть частью запроса (данных).
Для вашего дизайна вы можете использовать отдельные контроллеры для различные типы клиентов и авторизации пользователей, которые могут вызывать одни и те же услуги.