Asp.net mvc 4 ClaimsAuthorizationManager.CheckAccess:在不进入登录页面的情况下处理false
我正在开发一个ASP.NET MVC应用程序,它使用ACS进行身份验证。用户必须经过身份验证才能访问网站的任何部分 我已经创建并配置了ClaimsAuthorizationManager,将自定义逻辑放在CheckAccess方法中,并使用ThinkTecture的IdentityModel属性在控制器方法上声明性地使用它 例如:[索赔授权(“编辑”、“客户”)] 如果经过身份验证的用户试图访问他们没有足够权限访问的资源,CheckAccess方法将按预期返回false。但是,用户随后会立即再次重定向到登录页面。这显然是不正确的,因为用户已经过身份验证(只是没有授权)。我希望用户被重定向到一个视图,该视图通知用户他们没有访问所需资源的权限。我一直无法在管道或配置中找到实现这一目标的正确位置 我能够做到这一点的唯一方法是在CheckAccess中抛出一个自定义异常,而不是返回false,然后在Application\u Error中处理该异常。这显然是错误的。达到预期效果的正确模式是什么 谢谢Asp.net mvc 4 ClaimsAuthorizationManager.CheckAccess:在不进入登录页面的情况下处理false,asp.net-mvc-4,claims-based-identity,Asp.net Mvc 4,Claims Based Identity,我正在开发一个ASP.NET MVC应用程序,它使用ACS进行身份验证。用户必须经过身份验证才能访问网站的任何部分 我已经创建并配置了ClaimsAuthorizationManager,将自定义逻辑放在CheckAccess方法中,并使用ThinkTecture的IdentityModel属性在控制器方法上声明性地使用它 例如:[索赔授权(“编辑”、“客户”)] 如果经过身份验证的用户试图访问他们没有足够权限访问的资源,CheckAccess方法将按预期返回false。但是,用户随后会立即再次
Mat在ASP.NET管道中处理401,或者从ClaimsAuthorizeAttribute派生并重写SendUnauthorizedResponse(或类似)方法。对于任何感兴趣的人,我实施了建议的解决方案,如下所示:
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);
}
}
}
杰出的谢谢我会试试的,好好享受一下。谢谢