Запросить значение разрешения с контекстом - PullRequest
0 голосов
/ 11 декабря 2018

Я начинаю использовать авторизацию на основе утверждений для моего проекта веб-API asp.net.

В моих проектах пользователи могут иметь разрешение на редактирование сущностей.Но у пользователя есть разрешение на редактирование entity1, а не entity2.Формально он должен уметь делать POST entities/1, но не POST entities/2.

Я думаю, как добавить эту информацию в Претензии.Я вижу 2 подхода:

  1. Добавить заявку со значением, содержащим идентификатор объекта:

    this.AddClaim(new Claim("permission", "entity/1/edit"));
    this.AddClaim(new Claim("permission", "entity/42/edit"));
    
  2. Добавить заявку с типом edit изначение - это идентификатор объекта:

    this.AddClaim(new Claim("entity/edit", "1"));
    this.AddClaim(new Claim("entity/edit", "42"));
    

Я допускаю, что что-то упускаю из концепции претензий.И, может быть, есть лучший способ добиться этого.

1 Ответ

0 голосов
/ 31 января 2019

Лучшим подходом является авторизация на основе ресурсов. https://docs.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.2

Если вы не в ядре asp.net Вы можете попробовать https://leastprivilege.com/2014/06/24/resourceaction-based-authorization-for-owin-and-mvc-and-web-api/

Основная идея - это выпроверить доступ к ресурсу (документу).Как эта информация хранится, не имеет значения при предоставлении / отказе в доступе.

if (!HttpContext.CheckAccess(
    "Edit",
    "Album",
    id.ToString()))
{
    return new HttpUnauthorizedResult();
}

После этого у вас будет отдельный модуль, в котором определены правила авторизации

app.UseResourceAuthorization(new ChinookAuthorization());

https://github.com/IdentityModel/Thinktecture.IdentityModel/blob/master/samples/OWIN/ResourceAuthorization/WebApp/ChinookAuthorization.cs

Там вы проверите, есть ли у текущего пользователя доступ к этому ресурсу. Возможно, он ищет ресурс по ID ресурса в БД и проверит, разрешен ли текущему пользователю доступ.

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