15

来自发行说明页面的身份验证过滤器

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

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

早些时候,我通过编写 ownCustomAttribute: FilterAttribute, IAuthorizationFilter和 implement来管理操作/控制器的访问控制列表public void OnAuthorization(AuthorizationContext filterContext)。可以在这里使用这个 AuthenticationFilter 吗?

4

2 回答 2

18

正如文档所说,自定义身份验证过滤器提供了每个操作、每个控制器或全局的身份验证。

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

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

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

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

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

在引入身份验证过滤器之前,这并没有明确分开。就个人而言,我曾经为此使用授权过滤器,但是以这种特定顺序(首先是身份验证,然后是授权)具有两个单独的过滤器层会更干净。

于 2013-09-27T10:51:17.847 回答
1

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

于 2014-04-24T10:42:54.380 回答