Промежуточное ПО, ограничивающее доступ к контроллеру - PullRequest
0 голосов
/ 26 марта 2019

Я реализовал промежуточное программное обеспечение, которое будет выполняться на каждом маршруте.На основании отсутствия претензии в удостоверении личности я бы хотел ограничить доступ к маршруту.Ниже описано, что я могу реализовать сейчас

app.Map(new PathString(Configuration["APIRoutes"]), HandleCustomAuthentication);

// Функция

private void HandleCustomAuthentication(IApplicationBuilder app)
{
    app.Run(async (context) =>
    {
        var route = context.GetRouteData();
        var token = context.Request.Headers["Authorization"].ToString().Split(" ")[1];
        if (context.Request.Headers.ContainsKey("xyz") && context.Request.Headers["xyz"] !="0" )
        {
            // No idea how to make sure if this condition is met run the particular route.
        }
    });
}

Может кто-нибудь подсказать, как это сделать?

PS: Яс использованием dot net core 2.0

1 Ответ

0 голосов
/ 26 марта 2019

TL; DR : Вы не можете сделать это (за исключением того, что вы анализируете маршрут вручную).Но в любом случае это неправильный подход.

В этом случае вы должны использовать аутентификацию на основе политики .

Длинный ответ

Вы не можетесделай это (прямо сейчас).

Внутри промежуточного программного обеспечения еще не определено.Они определены в промежуточном программном обеспечении маршрутизации (.UseMvc - это не что иное, как промежуточное программное обеспечение маршрутизации).

В ASP.NET Core 2.2 введена новая маршрутизация конечной точки (ранее известная как диспетчер), которая будет действоватьв качестве новой базы и позволяет ранним промежуточным программам получать доступ к данным маршрутизации.

Но в ASP.NET Core 2.2 маршрутизация конечной точки используется только под капотом в промежуточном программном обеспечении UseMvc и не имеет общедоступного API для всехдругие промежуточные программы.Это объявлено для ASP.NET Core 3.0.

Правильный способ сделать то, что вы ищете, это реализовать Авторизация на основе политик .Также см. Заявление blowdart здесь ).

В основном вы создаете политику на основе утверждений и добавляете атрибут [Authorize(Policy = "EmployeeOnly")] к своим действиям или контролерам.

services.AddAuthorization(options =>
{
    options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});

И на контроллере

[Authorize(Policy = "EmployeeOnly")]
public class MyController : ControllerBase
{
    ...
}

или

[Authorize(Policy = "EmployeeOnly")]
public Task<IActionResult> GetEmployeeProfile(Guid employeeId)
{
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...