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/
配置方式有两种:
直接在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/" }在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的繁琐细节。
配置步骤:
安装依赖包
确保项目中安装了Microsoft.Identity.Web.DownstreamApiNuGet包。在appsettings.json中添加下游API配置
新增DownstreamApi节点,指定API的基础地址和权限范围:"DownstreamApi": { "BaseUrl": "https://your-api-app.azurewebsites.net", // 你的API地址 "Scopes": "https://test555.onmicrosoft.com/api/access_as_user" // API注册的权限范围 }在Program.cs中注册DownstreamApi服务
扩展认证服务配置,添加DownstreamApi支持:builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAdB2C")) .EnableTokenAcquisitionToCallDownstreamApi() // 启用令牌获取能力 .AddDownstreamApi("MyDownstreamApi", builder.Configuration.GetSection("DownstreamApi")) // 注册下游API .AddInMemoryTokenCaches(); // 启用令牌缓存在代码中使用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
相关产品推荐
相关产品推荐

