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

ASP.NET Core 5使用AddJwtBearer做JWT颁发者验证时如何添加参数

解决方案

你遇到的问题是JwtBearer中间件默认会自动基于Authority字段拼接OpenID配置路径,无法直接追加B2C要求的用户流参数,你可以通过显式指定元数据地址的方式绕过自动拼接逻辑,具体修改如下:

  1. 修改JwtConfig.cs的扩展方法,新增用户流参数并手动指定MetadataAddress:
public static AuthenticationBuilder AddJwtBearerConfiguration(this AuthenticationBuilder builder, string issuerBase, string audience, string userFlowId)
{
    return builder.AddJwtBearer(options => 
    {
        // 手动指定完整的OpenID配置元数据地址,中间件将不再自动拼接路径
        options.MetadataAddress = $"{issuerBase.TrimEnd('/')}/.well-known/openid-configuration?p={userFlowId}";
        options.Audience = audience;
        options.TokenValidationParameters = new TokenValidationParameters()
        {
            ClockSkew = TimeSpan.FromSeconds(30),
            // 如需显式指定颁发者可打开下方注释,值要和你B2C用户流返回的颁发者一致
            // ValidIssuer = $"https://<blade_id>.b2clogin.com/{tenantId}/v2.0/"
        };
        // 原有挑战处理代码保留
        ...
    });
}
  1. 修改Startup.cs中的调用逻辑,传入你的用户流ID:
public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearerConfiguration(
                    "https://<blade_id>.b2clogin.com/<tenant_id>/v2.0/",
                    "<audience_id>",
                    "B2C_1_ropc" // 替换为你实际使用的用户流ID
                );
    ...
}

原理说明

只要显式给MetadataAddress赋值,JwtBearer中间件就会跳过自动拼接OpenID配置路径的逻辑,直接使用你传入的完整地址拉取验证用的公钥等配置,自动携带用户流参数,即可解决IDX20803报错问题。

内容的提问来源于stack exchange,提问作者Will Sutton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:48:03