У меня есть проект ASP.NET Core 2.1 Web Api, который использует пользовательскую аутентификацию HMAC.Аутентификация успешно идентифицирует пользователя.
Я использую Политики для нескольких из моих действий контроллера (для ограниченного доступа), и есть одно действие контроллера, где я хочу Разрешить анонимный доступ.Все остальные действия контроллера должны просто требовать аутентификации пользователя (общий доступ).
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(new RequireHttpsOrCloseAttribute());
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddAuthentication(HmacAuthenticationDefaults.Scheme)
.AddHmacAuthentication();
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
options.AddPolicy("Admin", policy => policy.RequireRole("Admin"));
options.AddPolicy("Historian", policy => policy.RequireRole("Historian"));
});
}
Вот пример контроллера, где первое действие использует Политику Historian
, которая работает и вернется успешно.
Второе действие, которое просто использует базовый атрибут Authorize
, возвращает неавторизованное для того же пользователя.
[Route("[controller]")]
[ApiController]
public class EventsController : ControllerBase
{
[Authorize(Policy = "Historian")]
[Route("Source/{sourceKey:int}/First")]
public IActionResult Returns200(int sourceKey)
{
//return a result
}
[Authorize]
[Route("Source/{sourceKey:int}/Last")]
public IActionResult Returns401(int sourceKey)
{
//return a result
}
}
Я попытался установить DefaultPolicy в AddAuthorization
, но это не помогло.Я действительно не хочу создавать политику «GeneralAccess», а просто использовал бы атрибут Authorize
для его обозначения.
Почему атрибут Authorize
без политики возвращает 401?