Я создал простой AuthorizationHandler, как показано ниже:
public class IdentityHandler<TRole> : AuthorizationHandler<IdentityRequirement<TRole>>, ITokenValidator
where TRole : Role
{
protected AuthorizationHandlerContext AuthContext { get; private set; }
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PcIdentityRequirement<TRole> requirement)
{
AuthContext = context;
//some checking
//if no reuqiremnets then call ThrowUnathorizedException()
context.Succeed(requirement);
return Task.CompletedTask;
}
public virtual Task ThrowUnathorizedException(string message)
{
AuthContext.Fail();
return Task.CompletedTask;
}
}
и требования, как указано ниже:
public class IdentityRequirement<TRole> : IAuthorizationRequirement
where TRole : Role
{
public TRole Role { get; }
public PcIdentityRequirement()
{
Role = Activator.CreateInstance<TRole>();
}
}
Я также добавил обработчики в Startupfile
AddAuthorization(options => options.AddPolicy(name, policy => policy.Requirements.Add(requirement)));
При успешном выполнении требований все работает нормально. Однако, когда я не устанавливаю context.Succeed (req)
в HandleRequirementAsync
, он возвращает 500 и сообщение:
Не указана схема аутентификации, и не было
DefaultChallengeScheme найден.
Что мне там делать?