You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MORYX Access Management框架中[Authorize]属性失效问题求助

问题原因及解决办法

你的[Authorize]属性被忽略的核心原因是Startup.cs里重复调用了UseEndpoints,且第二次调用时给所有控制器加了全局的AllowAnonymousAttribute元数据,这个全局配置直接覆盖了你在控制器方法上单独设置的[Authorize]属性。

具体问题拆解

你代码里先后两次调用了app.UseEndpoints:

  • 第一次调用已经正确完成了控制器和Razor Pages的路由映射,没有额外授权配置
  • 第二次调用重复映射控制器后,执行了conventionBuilder.WithMetadata(new AllowAnonymousAttribute())——这会给所有控制器的所有方法都打上“允许匿名访问”的标记,不管你在方法上写了什么[Authorize]规则都会被覆盖。

修复步骤

  1. 删除重复的UseEndpoints调用,只保留一次即可
  2. 把开发环境的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:53:14