Меня тоже укусило, у меня был такой код:
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddRequirements(new MustBeSuperAdminRequirement())
.Build();
})
Можно было бы подумать, что MustBeSuperAdminRequirement
не будет вызван, если пользователь не вошел в систему ... но это не так ! ... все шло как по маслу, и я потратил несколько часов, почесывая голову ...
В качестве обходного пути я сделал это:
public static IMvcBuilder ConfigureMvc(this IServiceCollection services)
{
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
//.RequireAuthenticatedUser() //<-- this does not seems to do anything, refer: https://github.com/dotnet/aspnetcore/issues/4656#issuecomment-605012014
.AddRequirements(new MustBePtwUserRequirement())
.Build();
})
protected override async Task HandleRequirementAsync(
AuthorizationHandlerContext context,
MustBeSuperAdminRequirement requirement)
{
var principal = context.User;
if (!principal.IsAuthenticated())
{
return; //user not logged in
}
//the rest of the codes
}
.. а здесь ...
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers().RequireAuthorization();
});