MORYX Access Management框架中[Authorize]属性失效问题求助
问题原因及解决办法
你的[Authorize]属性被忽略的核心原因是Startup.cs里重复调用了UseEndpoints,且第二次调用时给所有控制器加了全局的AllowAnonymousAttribute元数据,这个全局配置直接覆盖了你在控制器方法上单独设置的[Authorize]属性。
具体问题拆解
你代码里先后两次调用了app.UseEndpoints:
- 第一次调用已经正确完成了控制器和Razor Pages的路由映射,没有额外授权配置
- 第二次调用重复映射控制器后,执行了
conventionBuilder.WithMetadata(new AllowAnonymousAttribute())——这会给所有控制器的所有方法都打上“允许匿名访问”的标记,不管你在方法上写了什么[Authorize]规则都会被覆盖。
修复步骤
- 删除重复的
UseEndpoints调用,只保留一次即可 - 把开发环境的CORS配置移到
UseRouting之后、UseAuthentication之前,符合ASP.NET Core中间件的执行顺序规范
修改后的Startup.cs相关代码示例:
... app.UseHttpsRedirection(); app.UseRouting(); // 调整CORS位置到路由之后、认证之前 if (env.IsDevelopment()) { app.UseCors("CorsPolicy"); } app.UseAuthentication(); app.UseAuthorization(); // 只保留这一次UseEndpoints调用 app.UseEndpoints(endpoints => { var conventionBuilder = endpoints.MapControllers(); endpoints.MapRazorPages(); // 移除这行全局匿名配置:conventionBuilder.WithMetadata(new AllowAnonymousAttribute()); }); ...
额外检查项
- 确认
bananarama授权策略已经在Startup中正确配置,比如通过services.AddAuthorization(options => { options.AddPolicy("bananarama", policy => { ... }); }) - 确保MORYX Access Management的认证相关服务已经正确注册,比如
services.AddMoryxIdentity()等必要配置已完成
内容的提问来源于stack exchange,提问作者manf
相关产品推荐
相关产品推荐

