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