asp.net-mvc-4 - ClaimsAuthorizationManager.CheckAccess : Handling false without going to login page

标签 asp.net-mvc-4 claims-based-identity

我正在开发一个使用 ACS 进行身份验证的 ASP.NET MVC 应用程序。用户必须经过身份验证才能访问网站的任何部分。

我已经创建并配置了我的 ClaimsAuthorizationManager,将我的自定义逻辑放在 CheckAccess 方法中,我正在使用 ThinkTecture 的 IdentityModel 属性在 Controller 方法上以声明方式使用它。

例如:[ClaimsAuthorize("Edit", "Clients")]

如果经过身份验证的用户试图访问他们没有足够权限访问的资源,CheckAccess 方法将按预期返回 false。但是,用户随后会立即再次重定向到登录页面。这显然是不正确的,因为用户已经通过身份验证(只是未授权)。我想要发生的是将用户重定向到一个 View ,该 View 通知用户他们无权访问所需的资源。我一直无法在管道或配置中找到正确的位置来实现这一点。

我能够做到的唯一方法是在 CheckAccess 中抛出自定义异常而不是返回 false,然后在 Application_Error 中处理异常。这显然是不正确的。实现我想要的结果的正确模式是什么?

谢谢

垫子

最佳答案

对于任何感兴趣的人,我按如下方式实现了建议的解决方案:

    public class CustomClaimAuthorizeAttribute : ClaimsAuthorizeAttribute
{
    public CustomClaimAuthorizeAttribute()
    {
    }

    public CustomClaimAuthorizeAttribute(string action, params string[] resources)
        : base(action, resources)
    {
    }

    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            // User is authenticated but doesn't have sufficent permissions. Redirect to InsufficientPermissions page
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary
                {
                    {"Controller", "Security"},
                    {"Action", "InsufficientPermissions"}
                });
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

关于asp.net-mvc-4 - ClaimsAuthorizationManager.CheckAccess : Handling false without going to login page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18693295/

相关文章:

asp.net - ADFS 2.0超时以及Freshness Value,TokenLifetime和WebSSOLifetime参数之间的关系

azure - 如果我有自定义 STS,我是否需要联合身份验证?如果是这样,为什么?

.net - 什么是发行人/发行人以担保方式 claim ?

c# - 识别 Azure ACS 中的角色

c# - Asp.Net Mvc4 : How to use @ character in js file

asp.net-mvc - 将 session 变量检索到 ASP.NET MVC 4( Razor 、 View )

c# - SQL 连接

asp.net-mvc - 重复用户添加到数据库

c# - Sharepoint 2013 中的联合身份验证 : getting rtFa and FedAuth cookies

asp.net-mvc-4 - .net 4.5 ASP.Net Web API JSONP支持