深度分析.NET 5授权中间件的执行策略
大概的意思是说 :不管是匿名访问还是鉴权访问,均先识别用户身份,再决定跳过授权/应用授权![有身份访问 MVC Login]这个场景可以佐证这个看法。 头脑风暴 后来我又仔细检视看了授权的源代码,发现并不完整, 请看官仔细观察我原文的示例, 端点路由还有一个[健康检查],端点加上了[AllowAnonymous] endpoints.MapHealthChecks("/healthz").AllowAnonymous().WithDisplayName("healthz"); 这个端点并没有进入认证流程,从授权中间件源码上看也是如此。 故官方源码是否能进入认证逻辑:关键是看端点上是否包含授权策略: var authorizeData = endpoint?.Metadata.GetOrderedMetadata<IAuthorizeData>() ?? Array.Empty<IAuthorizeData>(); var policy = await AuthorizationPolicy.CombineAsync(_policyProvider, authorizeData); if (policy == null) { await _next(context); return; } 健康检查端点直接应用了[AllowAnonymous](实际上你可以不加), 这样就没有授权策略(policy= null),这个时候自然跳过后续,进入业务逻辑。 甚至, 你可以这样写:endpoints.MapControllers().RequireAuthorization().AllowAnonymous().WithDisplayName("default"); 这样的代码也要进入认证逻辑,因为它包含了授权声明。 根据以上分析,.NET 5授权中间件的流程是这样的: (编辑:ASP站长网) |