将授权添加到特定路由而不在mvc中添加属性

时间:2018-10-15 17:33:18

标签: c# asp.net-mvc asp.net-web-api

我需要在不添加Authorize属性的情况下向特定路由添加授权。我有什么办法可以在启动时做到这一点吗?我知道我可以在所有路由中全局添加Authorize属性,但是我只需要向控制器中的特定方法添加authorize,而无需触摸该控制器中的任何代码。

1 个答案:

答案 0 :(得分:3)

如果您无法触摸代码,我将看到唯一的解决方案-使用中间件进行检查。假设您要限制访问的路由是POST'/ users / register',因此您可以在启动时使用全局注册的ActionFilter来检查url,如果它的url是'/ users / register',则尝试检查令牌和如果令牌无效,则返回401。

还可以使用Owin中间件

这是使用ActionFilter实现这种逻辑的简单示例

public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configuration.Filters.Add(new CheckAuthorizationFilterAttribute());
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
    public class CheckAuthorizationFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var requestUri = actionContext.Request.RequestUri.AbsolutePath;
            if (requestUri == "/api/users/register")
            {
                var isTokenValid = ValidateToken();
                if (!isTokenValid)
                    actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
                return;
            }
        }

        public bool ValidateToken() => false;

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {

        }
    }