ASP.NET Core 5 MVC 角色授权跳转AccessDenied报404错误如何解决
问题原因
/Account/AccessDenied是ASP.NET Core OpenID Connect认证方案的默认权限不足跳转路径,你使用的AddMicrosoftIdentityWebApp默认继承了该配置,无需手动配置就会自动跳转。
你之前配置的UseExceptionHandler仅用于处理服务端运行时抛出的未捕获异常,不覆盖认证授权流程的跳转逻辑,所以不生效。
解决方法
修改ConfigureServices中的认证配置,通过ConfigureCookieAuthentication手动指定权限不足的跳转路径即可:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd")) // 新增以下配置 .ConfigureCookieAuthentication(options => { // 自定义权限不足(403)跳转路径 options.AccessDeniedPath = "/Error/AccessDenied"; // 可选:自定义未登录(401)跳转路径 // options.LoginPath = "/你的自定义登录页路径"; }); services.AddAuthorization();
注意事项
- 记得给
/Error/AccessDenied对应的PageModel添加[AllowAnonymous]特性,保证未授权用户也可以访问该页面,避免出现循环跳转问题。 - 角色校验不通过属于403权限不足,和401未登录是两种状态,对应的跳转路径分开配置即可。
内容的提问来源于stack exchange,提问作者marc_s
相关产品推荐
相关产品推荐

