У меня есть специальное требование:
public sealed class MyRequirement : IAuthorizationRequirement
{
}
Который я прописываю в своей заявке:
.AddAuthorization(options =>
options.AddPolicy(Policy.MyPolicy, policy => { policy.AddRequirements(new MyRequirement()); }))
И обработчик для этого имеет несколько проверок:
public sealed class MyHandler : AuthorizationHandler<MyRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
{
if (!context.User.HasClaim(c => c.Type == CustomClaimTypes.Status))
{
//_logger.Warning($"Status missing");
context.Fail();
}
else
{
var rawStatus = context.User.Claims.Single(x => x.Type == CustomClaimTypes.Status).Value;
EnumExtensions.TryParseNullable<Status>(rawStatus, true, out var status);
switch (status)
{
case null:
//_logger.Warning($"Authentication forbidden: Unexpected status: {rawStatus}");
context.Fail();
break;
case Status.A:
case Status.B:
//_logger.Warning($"Authentication forbidden: Invalid status: {status}");
context.Fail();
break;
case Status.C:
context.Succeed(requirement);
break;
}
}
return Task.CompletedTask;
}
}
Это успешно возвращает 403, если контекст не работает, но я хочу добавить пользовательское сообщение в ответ, например текст, который находится в регистраторе.
Я гуглил это, и это выглядит почти невозможным, чего я не понимаю, так как это похоже на очень базовую функциональность.
Есть идеи, как добавить пользовательский текст в ответ?