是否所有传入请求都是由ASP.NET MVC中的AuthorizeAttribute处理的?

时间:2017-01-27 04:43:11

标签: asp.net asp.net-mvc asp.net-authorization

我正在开发一个使用本地STS进行身份验证的ASP.NET MVC 5网站。 我将AuthorizeAttribute子类化为自定义身份验证/授权过程,将MyAuthorizeAttribute添加到GlobalFilters。 当用户未经过身份验证进入时,MyAuthorizeAttribute.OnAuthorize成功捕获并创建了一个SignInRequest以重定向到STS。这就是我想要的。 我观察到当用户成功验证并且STS重定向用户时,用户的浏览器将嵌入请求体中的SAML令牌发布到我的MVC Web应用程序,这是设计的,我希望MyAuthenticateAttribute可以捕获此请求,因此我可以从中提取令牌请求正文,检查并验证它,但是,这次没有调用MyAuthenticateAttribute.OnAuthorize()函数,它直接转到控制器。 那有什么不对吗?我应该在哪里捕获并处理用户发布的令牌?感谢。

2 个答案:

答案 0 :(得分:1)

您需要使用[Authorize]属性修饰您的操作方法,或者如果您希望对控制器中的所有操作进行授权,请在控制器本身上设置该属性。

另请参阅https://www.codeproject.com/Articles/1008731/Insight-of-ASP-NET-MVC-s-Authorize-Attribute

中[AllowAnonymous]的用法

答案 1 :(得分:1)

AuthorizeAttribute同时是AttributeIAuthorizationFilterAttributes实际上任何事情,MVC框架会扫描添加此属性的位置,并将其作为过滤器进行注册。

但是,您可以将其添加为全局过滤器,而不是使用它来装饰控制器或操作方法:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new AuthorizationAttribute());
        filters.Add(new HandleErrorAttribute());
    }
}

出于同样的原因,您可以创建自己的IAuthorizationFilter或子类AuthorizeAttribute来执行您想要的任何操作。如果在全球注册,它将始终针对所有操作运行,然后您可以使用它来全局自定义请求。