【发布时间】:2019-08-03 04:00:05
【问题描述】:
我有一个自定义要求:
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,但我想在响应中添加自定义消息,例如记录器中的文本。
我一直在谷歌上搜索它,它看起来几乎不可能,我不明白,因为它感觉像是非常基本的功能。
任何想法如何将自定义文本添加到响应中?
【问题讨论】:
-
解决了!奇怪的是 Stack-overflow 之前没有人遇到过这个问题。对我来说似乎很常见
-
你是怎么解决的?这似乎不是一种标准的方法。
-
@Nick 你是怎么解决这个问题的?能否请您分享详细信息
标签: .net authentication asp.net-core-2.1