Авторизация на основе политик не работает в ядре asp.net - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь получить авторизацию на основе политик, работающую в ядре .net 2.1 на основе этой статьи: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1

Однако я не могу заставить ее работать.

ВВ приведенном ниже примере я закомментировал строку context.suceeed, поэтому мог бы подумать, что мой вызов API для моего usercontroller завершится неудачей.

Однако мой вызов API принимается.

Что такоеЯ что-то не так делаю?

Это мой startup.cs

public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddSingleton<IAuthorizationHandler, VerifyAuthCookieHandler>();

        services.AddAuthorization(options =>
        {
            options.AddPolicy("VerifyAuthCookie", policy =>
                policy.Requirements.Add(new VerifyAuthCookieRequirement()));
        });

        services.AddMvcCore().AddJsonFormatters();

    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
    }

}

Вот мой обработчик

public class VerifyAuthCookieHandler : AuthorizationHandler<VerifyAuthCookieRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                   VerifyAuthCookieRequirement requirement)
    {

        //context.Succeed(requirement);

        return Task.CompletedTask;
    }
}

А вот мое требование:

public class VerifyAuthCookieRequirement : IAuthorizationRequirement
{

    public VerifyAuthCookieRequirement()
    {

    }
}

И, наконец, мой контроллер:

[Route("api/[controller]")]
[Authorize(Policy = "VerifyAuthCookie")]
public class UserController : Controller
{

}

Если я добавлю код в HandleRequirementAsync и установлю точку останова, тогда он не будет срабатывать при отладке, поэтому мой обработчик вообще не будет вызываться.

1 Ответ

0 голосов
/ 11 июня 2018

Вы должны вызвать app.UseAuthentication(); перед app.UseMvc(); в методе Configure класса Startup.Это добавит промежуточное программное обеспечение для проверки подлинности ASP.NET Core в конвейер запросов.

Поскольку вы используете services.AddMvcCore(), нам нужно будет вручную настроить службы авторизации, что services.AddMvc() сделает для вас автоматически.Мы должны добавить .AddAuthorization() к IMvcCoreBuilder.Это добавит службы аутентификации и авторизации по умолчанию и PolicyEvaluator.

Если вас интересуют точные службы, которые будут зарегистрированы в вашем контейнере DI, вам следует перейти по этой ссылке.

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