我正在将一个WebApi 2项目转移到MVC 6,因为微软正在将ASP.NET 5中的两个Api合并。在我的WebApi项目中,我有一个自定义属性筛选类,它可以使用公钥、私钥和HMAC身份验证(基本上,通过一些调整来适应我的项目)来验证、授权和防止事务重放。
现在在MVC6中,据我所知,我必须停止使用Microsoft.Web.Http命名空间中的任何内容,而是使用Microsoft.AspNet.Mvc。因此,我已经这样做了,但Microsoft.AspNet.Mvc.Filters似乎没有任何等同于Web 2的IAuthenticationFilter。
这对我来说是个问题,因为我的客户AuthenticationFilter实现了所有的IAuthenticationFilter,其中包含了所有的逻辑。更重要的是,它使用上下文临时存储帐户的公钥,这样我的控制器就可以访问它,依次加载帐户。
因此,我的问题是,在MVC6中使用类似身份验证过滤器的类来拦截请求并返回适当的状态代码,如何正确地过滤请求?我找不到任何专门涉及这些细节的文章(它们都倾向于覆盖MVC5)。
发布于 2015-09-22 17:16:42
我知道这是个老问题,但希望有人(甚至是你自己)能在答案中找到价值。
事实上,MVC6有一个替代方案。你有一个
public abstract class AuthorizationFilterAttribute :
Attribute, IAsyncAuthorizationFilter, IAuthorizationFilter, IOrderedFilter这基本上告诉您,您可以创建您的自定义类,从这个派生它(所有这些接口的命名空间,顺便说一句,是Microsoft.AspNet.Mvc.Filters,也就是它。您可以用它来修饰操作,也可以在Startup.cs中这样做,以应用于所有操作:
public void ConfigureServices(IServiceCollection services)
{
// Add MVC services to the services container.
services.AddMvc(options =>
{
// add an instance of the filter, like we used to do it
options.Filters.Add(new MySpecialFilter());
});
services.AddTransient<LogFilter>();
}如果希望在过滤器中使用更多的逻辑(例如,上面的LogFilter ),通过DI实例化,则需要使用任何一个服务过滤器或类型筛选器。
现在,您可以使用[ServiceFilter(typeof(LogFilter))]来修饰操作,或者在Startup.cs文件中使用o.Filters.Add(new ServiceFilterAttribute(typeof(LogFilter)));。但请记住,要做到这一点,您需要向DI容器注册类型,就像我前面对.AddTransient<>()调用所做的那样。
发布于 2016-07-20 11:37:29
IAuthenticationFilter已不复存在,IAuthorizationFilter在MVC 6中根本没有取代它。
原因:身份验证不等于授权。
因此,国际海事组织的认证过滤器应该保持可用!
https://stackoverflow.com/questions/31648446
复制相似问题