Custom AuthorizationFilter не вызывается при использовании аутентификации на основе ролей - PullRequest
0 голосов
/ 30 сентября 2019

Поскольку я обновил .NET Core 2.2 до 3.0, мой пользовательский AuthorizationFilter перестал работать - он не вызывается и возвращает Unauthorized - когда я использую его в аннотации Action, разрешающей роли ([CustomAuthorize(Roles = "ADMIN")]). Когда это простой [CustomAuthorize], он отлично работает.

CustomAuthorize - это класс, который расширяет AuthorizeAttribute и IAsyncAuthorizationFilter. Чрезмерно упрощенно, это часть ролей:

public class CustomAuthorizeAttribute : AuthorizeAttribute, IAsyncAuthorizationFilter
{
    public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
    {
        var claims = new List<Claim>();
        claims.Add(new Claim(ClaimTypes.Role, "ADMIN"));
        var appIdentity = new ClaimsIdentity(claims);
        context.HttpContext.User.AddIdentity(appIdentity);
    }
}

Вкл. Startup.cs ConfigureServices:

services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization();

Я также пытался включить services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>();, но он перенаправляет пользователя на«Неавторизованная» страница и все еще не проверяет роль.

Полный Configure метод на Startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
    });
}

Что мне не хватает?

1 Ответ

0 голосов
/ 04 октября 2019

Я заставил его работать, возвращая маршрутизацию конечной точки. Это, конечно, не долгосрочное исправление, но ...

Вкл. ConfigureServices, заменено:

services.AddMvc()

на:

services.AddMvc(options =>
                    options.EnableEndpointRouting = false)

И на Configure, заменено:

app.UseEndpoints(endpoints =>
{
    endpoints.MapDefaultControllerRoute();
});

на:

app.UseMvc();
...