为何.NET默认Web应用模板仅配置app.UseAuthorization()无UseAuthentication?
这个设计主要有三方面的核心考量:
- 适配默认模板的最简无认证场景
默认使用dotnet new webapp、dotnet new mvc等不带身份认证参数的命令创建的项目,本身没有启用任何身份认证逻辑,所有端点默认允许匿名访问。此时即便管道中只有app.UseAuthorization()没有app.UseAuthentication(),授权中间件也不会抛出异常:对于没有配置任何授权规则的端点,它会直接放行,完全不影响应用的正常运行。 - 预留扩展入口,降低接入成本
开发者后续如果需要给应用增加身份认证、权限控制能力,只需要完成两处配置即可:1. 在服务注册阶段添加认证相关服务、配置对应认证方案;2. 在app.UseAuthorization()之前插入app.UseAuthentication()中间件即可,不需要额外再补充授权中间件的配置,能有效避免新手漏加授权中间件导致权限规则不生效的常见问题。 - 统一模板逻辑,降低出错概率
从.NET Core 3.0 正式引入端点路由机制后,官方就将授权中间件作为默认管道的标配项,不管项目是否开启身份认证,都统一保留该配置,让所有模板的管道结构保持一致,减少开发者在不同模板间切换时的适配成本,也避免了文档需要区分不同场景反复说明的问题。
如果你的应用完全不需要任何授权校验逻辑,直接删除 app.UseAuthorization() 也不会影响基础功能的正常运行。
内容的提问来源于stack exchange,提问作者Durga Prasad
相关产品推荐
相关产品推荐

