c# - 如何在 aspnetcore 身份中显示未经授权的消息

标签 c# asp.net-core asp.net-core-identity

我在 aspnetcore 1.1 中使用基于声明的身份验证和授权。

如果用户没有登录,他会按预期被转发到登录页面。

但是,如果用户已登录,但没有正确的声明,则用户将再次返回登录页面。

我如何更改它以便将用户路由到显示“您未获得授权...”的不同 View ?


services.AddAuthorization(options=>
{
  options.AddPolicy("IsEDIAdmin", policy => 
       policy.RequireClaim("IsEDIAdmin"));
});

[Authorize(Policy = "IsEDIAdmin")]
public IActionResult App()
{
        return PartialView();
}

最佳答案

我认为它比应该的要复杂一些,但您应该能够创建自己的过滤器。例如(未测试但编译):

public class ClaimRequirementAttribute : TypeFilterAttribute
{
    public ClaimRequirementAttribute(string claim, string failUrl) : base(typeof(ClaimRequirementFilter))
    {
        Arguments = new object[] { claim, failUrl };
    }
}

public class ClaimRequirementFilter : IAsyncActionFilter
{
    private readonly string _claim;
    private readonly string _failUrl;

    public ClaimRequirementFilter(string claim, string failUrl)
    {
        _claim = claim;
        _failUrl = failUrl;
    }

    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        if (!context.HttpContext.User.Claims.Any(c => c.Value == _claim))
        {
            context.Result = new RedirectResult(_failUrl);
        }
        else
        {
            await next();
        }
    }
}

然后像这样使用它:

[ClaimRequirement("IsEDIAdmin", "/some-exciting/url")]
public IActionResult Index()
{
    //snip
}

关于c# - 如何在 aspnetcore 身份中显示未经授权的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45359919/

相关文章:

c# - 带有 API key 的 Analytics Reporting v4

c# - 如何从运行时创建的控件中获取值

c# - ASP.NET Core Web App 将 404 请求记录为警告

c# - ASP.NET 5 对每个路由、应用程序部分或功能使用不同的服务容器

c# - 如何解析时区偏移字符串?

c# - .NET 2.0/C# 中泛型方法元数据的签名格式是什么?

garbage-collection - ASP.NET Core Web 应用程序 (.NET Framework) 中 app.config 文件的用途是什么?

asp.net-core - 如何让字体很棒的图标显示在 Asp.Net Core Identity 的帐户管理页面上?

asp.net-core - .NET Core 中的 AuthorizationContext 与 AuthorizationHandlerContext

c# - Asp.net Core Identity 单元测试 Controller 操作