【发布时间】:2014-07-05 04:23:19
【问题描述】:
如 leastprivilege 中所述,有两种方法可以使用 Thinktecture.IdentityModel 设置声明授权检查。一是设置过滤器。另一种是为要检查的动作添加属性。
我成功地使用了属性选项。但是,我想覆盖向登录页面发送未经授权(但经过身份验证)请求的行为。
相反,我只想显示 401 错误(或未经授权的页面)。到目前为止,我有以下类来覆盖 HandleUnauthorizedRequest 并抛出 401 错误(如果已验证)。但是,我想出如何连接它的唯一方法是将此类添加为过滤器。但是,通过这样做,它会跳过使用属性装饰,而只会将操作/资源发送到 CheckAcess 方法,这对我们来说毫无用处。
public class CustomClaimsAuthorizeAttribute : Thinktecture.IdentityModel.Authorization.Mvc.ClaimsAuthorizeAttribute
{
public CustomClaimsAuthorizeAttribute()
{
}
public CustomClaimsAuthorizeAttribute(string action, params string[] resources)
: base(action, resources)
{
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
throw new UnauthorizedAccessException("Insufficent permissions.");
base.HandleUnauthorizedRequest(filterContext);
}
}
【问题讨论】:
标签: c# asp.net-mvc security claims-based-identity