MVC 5中的身份验证过滤器

时间:2013-09-27 10:40:57

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

来自Release Notes

的身份验证过滤器
  

身份验证过滤器是ASP.NET MVC中的一种新型过滤器   在ASP.NET MVC管道中的授权过滤器之前运行   允许您指定每个操作,每个控制器的身份验证逻辑,   或全局的所有控制器。验证过滤器过程   请求中的凭据并提供相应的主体。   身份验证筛选器还可以添加身份验证挑战   回应未经授权的请求。

有人可以提供实际用途吗?我可以在哪里使用这个AuthenticationFilters?

之前我通过编写自己的CustomAttribute: FilterAttribute, IAuthorizationFilter并实施public void OnAuthorization(AuthorizationContext filterContext)来管理操作/控制器的访问控制列表。是否可以在此处使用此AuthenticationFilter?

2 个答案:

答案 0 :(得分:18)

正如文档所述,自定义身份验证筛选器为每个操作,每个控制器或全局提供身份验证。

一个示例用途是更改几个选定控制器的身份验证。例如,假设您的整个站点使用表单身份验证,其中主体来自表单cookie。

但是,您有一个选定的控制器充当OAuth2资源服务器,其中请求来自服务提供商(服务器),并且没有表单cookie,而是由服务提供商服务器提供OAuth2访问令牌。

这是自定义身份验证过滤器发挥作用的地方 - 它的任务是仅在当前请求的生命周期内将令牌转换为主体,仅用于充当资源服务器端点的唯一控制器。您不希望整个站点接受OAuth2令牌,而是一个特定的控制器。

引入身份验证过滤器的原因是将身份验证与授权分开,其中:

  • 身份验证用于建立当前请求的主体
  • 授权是验证当前主体是否被允许执行当前请求

在引入身份验证过滤器之前,这没有明确分开。就个人而言,我过去常常使用授权过滤器,但是按照这个特定的顺序有两个独立的过滤器层(首先是身份验证,然后是授权)只是更清晰。

答案 1 :(得分:1)

可以通过实现IAuthenticationFilter来创建自定义身份验证。它可以在需要当前用户主体的情况下使用,以通过重写OnAuthentication方法来执行控制器的某些操作部分。可以通过覆盖OnAuthenticationChallenge方法来请求额外的任务。