Я создаю новый 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?
Проверить Зачем использовать полную .NET Framework с ASP.NET Core?
Полагаю, я немного запутался в том, как я могу (или должен) смешивать и сопоставлять ядро asp.net и веб-api 2 (System.Web.Http). Вы предлагаете заменить веб-api 2 ядром asp.net, но нацеливаться на полную структуру?
Да, ASP.NET Core - это новое имя ASP.NET MVC 6. Это нет, привязанное к среде выполнения .NET Core. В диалоговом окне создания проекта выберите полную среду выполнения из списка сред выполнения.
Хорошо, спасибо @PanagiotisKanavos, я попробую.
У меня есть код, похожий на ваш, и политика авторизации работает должным образом. В моем запуске я вызываю класс для загрузки всех политик:
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
Оба используют удостоверение ASP.NET. Почему бы вам не использовать ASP.NET Core? Вы может нацелены на полную платформу с ASP.NET Core, она не привязана к .NET Core время выполнения