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

ASP.NET Core 8 MVC集成Azure AD B2C遇AADSTS50049错误求助

解决ASP.NET Core 8 MVC + Azure AD B2C获取令牌时的AADSTS50049错误及配置问题

问题1:正确的Authority配置方式

Azure AD B2C的Authority必须包含实例地址、租户域名、用户流/策略ID三个核心部分,完整格式为:

https://{tenant-name}.b2clogin.com/{tenant-domain}/{policy-id}/v2.0/

配置方式有两种:

  1. 直接在appsettings.json中指定完整Authority
    修改配置文件,添加拼接好的Authority字段:

    "AzureAdB2C": {
      "Instance": "https://test555.b2clogin.com",
      "ClientId": "test555",
      "Domain": "test555.onmicrosoft.com",
      "SignedOutCallbackPath": "/signout/B2C_1_SignUpSignIn",
      "SignUpSignInPolicyId": "B2C_1_SignUpSignIn",
      "Authority": "https://test555.b2clogin.com/test555.onmicrosoft.com/B2C_1_SignUpSignIn/v2.0/"
    }
    
  2. 在Program.cs中动态构造Authority
    如果不想硬编码拼接,可在注册认证服务时自动生成:

    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(options =>
        {
            builder.Configuration.Bind("AzureAdB2C", options);
            // 动态拼接完整Authority
            options.Authority = $"{options.Instance}/{options.Domain}/{options.SignUpSignInPolicyId}/v2.0/";
        });
    

注意:如果手动调用GetApplicationTokenAsync,必须传入与配置一致的完整Authority,否则会触发AADSTS50049错误。

问题2:DownstreamApi的配置必要性及方法

如果应用需要调用下游API,强烈建议配置DownstreamApi——它是Microsoft.Identity.Web提供的封装,能自动处理令牌获取、缓存和API调用,避免手动管理TokenAcquisition的繁琐细节。

配置步骤:

  1. 安装依赖包
    确保项目中安装了Microsoft.Identity.Web.DownstreamApi NuGet包。

  2. 在appsettings.json中添加下游API配置
    新增DownstreamApi节点,指定API的基础地址和权限范围:

    "DownstreamApi": {
      "BaseUrl": "https://your-api-app.azurewebsites.net", // 你的API地址
      "Scopes": "https://test555.onmicrosoft.com/api/access_as_user" // API注册的权限范围
    }
    
  3. 在Program.cs中注册DownstreamApi服务
    扩展认证服务配置,添加DownstreamApi支持:

    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAdB2C"))
        .EnableTokenAcquisitionToCallDownstreamApi() // 启用令牌获取能力
        .AddDownstreamApi("MyDownstreamApi", builder.Configuration.GetSection("DownstreamApi")) // 注册下游API
        .AddInMemoryTokenCaches(); // 启用令牌缓存
    
  4. 在代码中使用DownstreamApi
    比如在IClaimsTransformation实现中注入IDownstreamApi并调用API:

    public class CustomClaimsTransformation : IClaimsTransformation
    {
        private readonly IDownstreamApi _downstreamApi;
    
        public CustomClaimsTransformation(IDownstreamApi downstreamApi)
        {
            _downstreamApi = downstreamApi;
        }
    
        public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
        {
            // 调用下游API
            var apiResponse = await _downstreamApi.GetAsync<ApiResponseModel>(
                "MyDownstreamApi", // 对应注册时的名称
                options => options.RelativePath = "/api/user/profile" // API相对路径
            );
    
            // 扩展用户声明
            var identity = principal.Identity as ClaimsIdentity;
            identity.AddClaim(new Claim("full_name", apiResponse.FullName));
    
            return principal;
        }
    }
    

额外排查点

出现AADSTS50049错误时,还需检查:

  • Instance、Domain、PolicyId的拼写是否与Azure门户中的配置完全一致
  • 确保Authority末尾包含/v2.0/后缀,这是Azure AD B2C OIDC端点的要求
  • 如果使用客户端凭证流,需确认应用在Azure AD B2C中已被授予对应API的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:03:16