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

Blazor配置OIDC(AzureAD)后,AllowAnonymous页面仍强制认证问题

解决Blazor Server Azure AD OIDC匿名首页问题

问题核心:你的配置中设置了FallbackPolicy = DefaultPolicy,这会强制所有未明确授权的端点(包括_Host页面)需要认证,同时_Host页面本身未标记允许匿名,导致未登录用户访问任何页面都会先跳转到登录。

步骤1:修改_Host.cshtml允许匿名访问

在_Host.cshtml顶部添加[AllowAnonymous]属性,确保未登录用户能加载Blazor应用的入口页面:

@page "/"
@namespace YourAppName.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@attribute [Microsoft.AspNetCore.Authorization.AllowAnonymous]

<!DOCTYPE html>
<html lang="en">
<!-- 原有页面内容 -->
</html>

步骤2:调整Program.cs中的授权策略

保留默认策略要求认证,同时确保回退策略不会覆盖匿名页面的配置:

builder.Services.AddAuthorization(options =>
{
    // 默认策略要求认证
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    // 回退策略使用默认策略,未指定授权的页面/端点都需要认证
    // 已给_Host和首页加AllowAnonymous,它们会自动绕过
    options.FallbackPolicy = options.DefaultPolicy;
});

步骤3:在匿名首页添加登录按钮

修改你的首页(Index.razor),添加登录逻辑,通过NavigationManager跳转到Azure AD登录页面:

@page "/"
@layout LayoutEmpty
@attribute [Microsoft.AspNetCore.Authorization.AllowAnonymous]
@inject NavigationManager NavManager

<h1>欢迎访问未登录页面</h1>
<button class="btn btn-primary" @onclick="Login">登录</button>

@code {
    private void Login()
    {
        // 跳转到Microsoft Identity提供的登录端点
        NavManager.NavigateTo("/MicrosoftIdentity/Account/SignIn", forceLoad: true);
    }
}

验证逻辑

  • 未登录用户访问根路径时,会加载匿名首页并显示登录按钮
  • 点击登录按钮后,跳转到Azure AD登录页面,登录完成后返回原页面
  • 访问其他未标记[AllowAnonymous]的Blazor页面时,会自动触发登录跳转

关键注意点

  • _Host.cshtml是Blazor应用的入口,必须允许匿名,否则所有Blazor路由都会被拦截
  • forceLoad: true确保跳转到登录页面时是服务器端重定向,而非Blazor客户端导航

内容的提问来源于stack exchange,提问作者M.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:33:13