Могу ли я использовать авторизацию 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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