ASP.NET Core 2.1 - атрибут авторизации не работает без политики - PullRequest
0 голосов
/ 03 октября 2018

У меня есть проект 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?

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