Поскольку я обновил .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();
});
}
Что мне не хватает?