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

Blazor 8多认证方法无法正常工作的问题排查

问题分析与解决方案

你的核心问题是重复调用AddAuthentication方法会覆盖之前的所有认证配置,包括默认的认证Scheme,所以每次只有最后配置的认证方式能正常工作。此外,IDX21310错误是因为OpenIdConnect响应中缺少access_token,需要调整配置确保正确获取令牌。

正确的多认证配置步骤

只需要调用一次AddAuthentication来设置全局默认Scheme,然后链式添加所有需要的认证方式,不要拆分多次调用。

1. 完整的服务配置代码

// 只调用一次AddAuthentication,设置全局默认Scheme
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = IdentityConstants.ApplicationScheme; // 用户名密码认证的默认Scheme
    options.DefaultSignInScheme = IdentityConstants.ExternalScheme; // 外部登录的默认SignIn Scheme
    options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme; // 默认引导用户登录的Scheme
})
// 添加Identity的Cookie认证(支持用户名密码登录)
.AddIdentityCookies()
// 添加Microsoft Identity的OpenIdConnect认证
.AddMicrosoftIdentityWebApp(opts =>
{
    builder.Configuration.GetSection("AzureAd").Bind(opts);
    
    // 解决IDX21310错误的关键配置
    // 1. 添加必要的权限范围(根据业务需求调整)
    opts.Scopes.Add("User.Read");
    // 2. 确保使用授权码流程(Blazor推荐的外部登录方式)
    opts.ResponseType = "code";
    // 3. 验证令牌的核心参数(保持默认即可,若有特殊需求再调整)
    opts.TokenValidationParameters.ValidateLifetime = true;
    opts.TokenValidationParameters.ValidateIssuer = true;
});

2. 解决IDX21310错误的额外检查

  • 确认Azure AD应用注册中已生成并配置客户端密钥,且appsettings.json的AzureAd节点中正确填写了ClientSecret。
  • 为Azure AD应用添加必要的API权限(比如User.Read),并完成管理员同意授权。

3. 中间件顺序必须正确

在Program.cs的管道配置中,认证中间件必须在授权中间件之前:

app.UseAuthentication();
app.UseAuthorization();

4. 登录页面的外部登录按钮配置

在Blazor登录页面(如Login.razor)中,确保外部登录按钮指定正确的认证Scheme:

<button type="button" 
        @onclick="() => Navigation.NavigateTo($"/Identity/Account/ExternalLogin?provider={OpenIdConnectDefaults.AuthenticationScheme}&returnUrl=/")">
    使用Microsoft账户登录
</button>

为什么之前的配置失效?

  • 第一次调用AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)会将默认Scheme设为OIDC,但后续第二次调用AddAuthentication会覆盖这个配置,把默认Scheme改为Identity的ApplicationScheme,导致OIDC的登录流程因配置被覆盖而失败。
  • 调整顺序后,第二次调用AddAuthentication将默认Scheme设为OIDC,导致用户名密码的Identity认证无法触发——默认挑战Scheme变成了OIDC,所以点击用户名密码登录会直接跳转到首页(未登录状态)。

内容的提问来源于stack exchange,提问作者Sascha Patschka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:52:45