Могу ли я использовать авторизацию asp.net core в api rest webapi2?

Я создаю новый RESTful API на основе веб-API 2. (Я должен ориентироваться на всю структуру из-за некоторых зависимостей в решении).

Раньше я использовал System.Security.Claims.ClaimAuthorizationManager для создания настраиваемых проверок безопасности пользователей. Однако это решение не очень удобно для тестирования (DI) или не поддерживает асинхронность.

Я хотел бы использовать авторизацию на основе политик, доступную в ядре aspnet (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies), поскольку это отличная модель, которая идеально соответствует моим потребностям.

Однако я застрял в том, возможно ли это на самом деле или нет. Похоже, что настоящий технический камень преткновения может заключаться в том, что требование политики находит обработчик требований посредством регистрации обработчика в коллекции служб, например:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddAuthorization(options =>
    {
        options.AddPolicy("AtLeast21", policy =>
            policy.Requirements.Add(new MinimumAgeRequirement(21)));
    });

    services.AddSingleton<IAuthorizationHandler, MinimumAgeHandler>();
}

Есть ли способ заставить обработчик требований быть выбран службой авторизации в службе Web API 2?

Оба используют удостоверение ASP.NET. Почему бы вам не использовать ASP.NET Core? Вы может нацелены на полную платформу с ASP.NET Core, она не привязана к .NET Core время выполнения

Panagiotis Kanavos 10.08.2018 16:16

Проверить Зачем использовать полную .NET Framework с ASP.NET Core?

Panagiotis Kanavos 10.08.2018 16:17

Полагаю, я немного запутался в том, как я могу (или должен) смешивать и сопоставлять ядро ​​asp.net и веб-api 2 (System.Web.Http). Вы предлагаете заменить веб-api 2 ядром asp.net, но нацеливаться на полную структуру?

G Clayden 10.08.2018 16:44

Да, ASP.NET Core - это новое имя ASP.NET MVC 6. Это нет, привязанное к среде выполнения .NET Core. В диалоговом окне создания проекта выберите полную среду выполнения из списка сред выполнения.

Panagiotis Kanavos 10.08.2018 16:45

Хорошо, спасибо @PanagiotisKanavos, я попробую.

G Clayden 10.08.2018 16:52
0
5
208
1

Ответы 1

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

services.AddAuthorization(options => {
   foreach(var item in Policies.Build()) {
       options.AddPolicy(item.Key, item.Value);
   }
});

Класс политик просто возвращает список строк / атрибутов авторизации.

var ret = new Dictionary<string, System.Action<AuthorizationPolicyBuilder>>();

ret.Add(PermissionNames.LocationsCreate, policy => policy.Requirements.Add(new PermissionRequirement(PermissionNames.LocationsCreate)));

А затем на контроллерах мы просто украшаем атрибутом authorize:

[Authorize(Policy = PermissionNames.LocationsCreate)]

Кажется, работает над нашими проектами веб-API .net core 2.0.

В ASP.NET Core нет отдельного проекта веб-API. Это вопрос о веб-API ASP.NET 2

Panagiotis Kanavos 10.08.2018 16:46

Другие вопросы по теме