【问题标题】:Are all incoming requests handled by AuthorizeAttribute in ASP.NET MVC?ASP.NET MVC 中的所有传入请求都由 AuthorizeAttribute 处理吗?
【发布时间】:2017-06-12 17:27:50
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    还可以在https://www.codeproject.com/Articles/1008731/Insight-of-ASP-NET-MVC-s-Authorize-Attribute查看 [AllowAnonymous] 的用法

    【讨论】:

    • 忘了提到我已将 MyAuthorizeAttribute 添加到 GlobalFilters。
    【解决方案2】:

    AuthorizeAttribute 既是 Attribute 也是 IAuthorizationFilterAttributes 实际上并没有任何事情,MVC 框架会扫描添加此属性的位置并将其注册为动态过滤器。

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

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

    同样,您可以创建自己的IAuthorizationFilter 或子类AuthorizeAttribute 来做任何您想做的事情。如果全局注册,它将始终运行所有操作,然后您可以使用它对全局请求进行自定义授权。

    【讨论】:

    • 忘了提到我已将 MyAuthorizeAttribute 添加到 GlobalFilters。
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多