如何为.NET 8 Blazor Server应用配置自定义访问拒绝页面
自定义Blazor Server授权访问拒绝页面配置
1. 配置Cookie认证的访问拒绝路径
在Program.cs中,添加Microsoft Identity认证后,通过Cookie配置指定自定义访问拒绝页面的路由:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { builder.Configuration.GetSection("AzureAd").Bind(options); }) // 覆盖默认访问拒绝路径 .AddCookie(options => { options.AccessDeniedPath = "/AccessDenied"; });
2. 创建自定义访问拒绝页面
在Components/Pages目录下新建AccessDenied.razor组件,示例内容如下:
@page "/AccessDenied" @layout MainLayout <h1>访问被拒绝</h1> <p>您的账户未在系统中注册,无法访问本应用。</p>
3. 避免默认Identity UI路由冲突(可选)
如果默认的MicrosoftIdentity/Account/AccessDenied仍生效,可调整AddMicrosoftIdentityUI的配置,保留必要的登录/注销路由,不指定默认访问拒绝路径:
builder.Services.AddControllersWithViews() .AddMicrosoftIdentityUI(options => { options.Account.LoginPath = "/MicrosoftIdentity/Account/Login"; options.Account.LogoutPath = "/MicrosoftIdentity/Account/Logout"; // 不设置默认AccessDeniedPath,让Cookie配置生效 });
4. 确认授权策略逻辑
确保现有授权策略能正确触发授权失败:
builder.Services.AddAuthorization(options => { options.AddPolicy("RequireValidUser", policy => { policy.RequireAssertion(context => !context.User.HasClaim(c => (c.Type == "UserNotFound" && c.Value == "true") || (c.Type == "UserArchived" && c.Value == "true") )); }); options.FallbackPolicy = options.GetPolicy("RequireValidUser") ?? options.DefaultPolicy; });
关键说明
- 授权策略失败时,ASP.NET Core会优先使用Cookie认证配置的
AccessDeniedPath进行重定向,而非OpenIdConnect的配置项。 - 自定义页面必须添加
@page指令指定路由,保证路由可被正确访问。 - 检查中间件顺序,确保
UseAuthentication()和UseAuthorization()放置在路由映射之前。
内容的提问来源于stack exchange,提问作者esr124
相关产品推荐
相关产品推荐

