C#面试题更新 2026-08-05

请说明在 ASP.NET Core 应用中,认证中间件的作用及其配置方式,包括它如何参与请求处理管线,以及如何添加和使用认证服务。

技术原理方案权衡ASP.NET CoreC#

考察说明

考察对 ASP.NET Core 认证中间件机制的理解和配置能力。

回答思路

  1. 【回答框架 1】ASP.NET Core 认证中间件是通过 UseAuthentication 扩展方法注册的,它处理传入请求,尝试从请求中提取身份信息,并设置 HttpContext.User 属性。它在 UseAuthorization 之前调用,确保认证先于授权执行。
  2. 【回答框架 2】配置认证首先需要在服务容器中调用 AddAuthentication 方法,并指定默认认证方案,例如 AddAuthentication(options => { options.DefaultScheme = "Cookies"; })。然后添加具体的认证方案,如 AddCookie 用于 Cookie 认证,或 AddJwtBearer 用于 JWT 认证。
  3. 【回答框架 3】在请求管线中,认证中间件在每个请求上运行,读取认证方案设置的处理器(如 Cookie 处理器),它负责还原用户身份。配置的核心是注册认证服务和中间件,并选择合适的方案。
  4. 【回答框架 4】认证中间件不主动拒绝未认证的请求,而是设置 User 属性,由授权中间件或应用逻辑决定是否拒绝。当调用 AuthenticateAsync 时,认证处理器会尝试进行认证,但不会触发挑战或禁止行为。
  5. 【关键点 1】认证中间件通过 UseAuthentication 注册,负责从请求中提取身份并设置 HttpContext.User。
  6. 【关键点 2】使用 AddAuthentication 和具体方案(如 AddCookie、AddJwtBearer)配置认证。
  7. 【关键点 3】认证中间件只是设置身份,不直接拒绝请求;授权中间件负责访问控制。
  8. 【易错点 1】容易混淆认证和授权:认证是确定用户身份,授权是确定权限,二者由不同中间件处理。
  9. 【易错点 2】未注册认证服务就使用 UseAuthentication 会导致运行时错误。
  10. 【易错点 3】忽略默认方案配置,可能导致 AuthenticateAsync 调用时未指定方案而抛出异常。