来自IAuthorizationRequirement上下文失败的响应中的自定义消息

时间:2019-03-12 15:45:55

标签: .net authentication asp.net-core-2.1

我有一个自定义要求:

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,但我想向响应中添加自定义消息,例如记录器中的文本。

我一直在搜索它,它看起来几乎是不可能的,我不明白,因为它感觉像是非常基本的功能。

有什么想法如何向响应中添加自定义文本?

1 个答案:

答案 0 :(得分:1)

对延迟响应表示歉意。

我通过以下方法解决了这个问题:

group_by

其中

SYMBOL     variable value  Sample  IDs  Group
TLR8 MMRF_2613_1_BM 0.58 Baseline 2613 MostUp_divided_by_LessUp
TLR4 MMRF_2613_1_BM 1.29 Baseline 2613 MostUp_divided_by_LessUp

其中ForbiddenEntityResult只是一个结果类型,您可以将其替换为任何ObjectResult。

您还可以在此处进行日志记录或处理其他结果,例如未经授权等