Добавление API в IdentityServer4 - PullRequest
0 голосов
/ 07 мая 2020

У меня есть API и клиент, которые я создал с помощью краткого руководства для Identity Server, и он работает. В файле конфигурации у меня есть API под названием api1, который я установил в качестве разрешенной области для созданного мной пользователя с именем Admin. В свою очередь, это позволяет мне вызывать контроллер в проекте API под названием IdentityController. Это возвращает некоторые данные о претензиях. Прекрасно работает. Я добавил новый контроллер под названием MsgController с авторизацией, и его можно вызвать без проблем. Однако мне нужны некоторые рекомендации по следующему:

  1. Я хочу предоставить новому пользователю разрешенную область действия api2, а затем разрешить этой области только вызывать MsgController
  2. Как предотвратить разрешено использование области "api1" в MsgController и запретить "api2" (новая область, которую я хочу создать) использовать IdentityController.

В идеале мне нужно создать тест с двумя учетными записями и показать, что они не могут получить доступ к другому контроллеру в зависимости от их объема. Я думал, что имя области будет коррелировать с именем контроллера, но, похоже, это не так. Я думаю, что это мое непонимание того, как применять области видимости к API.

Спасибо.

1 Ответ

0 голосов
/ 07 мая 2020

Вам просто нужно ограничить контроллеры с помощью политик.

в вашем startup.cs ConfigureService() добавьте следующее расширение

services.AddAuthorization(options =>
{
    //policy1
    options.AddPolicy("api1Policy", builder =>
    {
        builder.RequireClaim("scope", "api1");
    });

    //policy2
    options.AddPolicy("api2Policy", builder =>
    {
        builder.RequireClaim("scope", "api2");
    });
});

Для более сложных проверок политик вы можете использовать builder.RequireAssertion();

В ваших контроллерах добавьте аннотацию, подобную этой.

[Authorize(Policy = "api2Policy")]
public class MsgController: Controller
{
   //Users with api2 scope will be allowed in here. Likewise, do the same for others.
}

Для получения дополнительных сведений о ссылке Ссылка1 Ссылка2

...