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

如何为.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:43:10