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

从AAD B2C升级至Microsoft Entra External ID后,集成测试认证时出现'resource'参数缺失错误的求助

从AAD B2C升级至Microsoft Entra External ID后,集成测试认证时出现'resource'参数缺失错误的求助

我来帮你拆解并解决这个问题,你碰到的AADSTS900144: The request body must contain the following parameter: 'resource'错误,本质是MSAL请求和Entra External ID(B2C)的认证规则不匹配导致的,咱们一步步来修复:

核心问题根源

这个错误是因为你的请求触发了v1.0版认证终结点的逻辑——v1流程强制要求传resource参数,但Entra B2C默认使用v2.0终结点,依赖scopes参数来声明权限。你当前代码里用了通用的WithOidcAuthority,没有适配B2C专属的认证配置,才会出现这个参数不兼容的问题。

具体修复步骤

1. 替换B2C专属的Authority配置方法

把代码里的WithOidcAuthority改成MSAL专门为B2C设计的WithB2CAuthority,这个方法会自动适配B2C的v2.0终结点格式,避免触发v1的resource参数要求:

IPublicClientApplication app = PublicClientApplicationBuilder
    .Create(clientId)
    .WithExperimentalFeatures()
    .WithB2CAuthority(authority) // 替换原有的WithOidcAuthority
    .WithRedirectUri("https://localhost")
    .Build();

注意:你的authority格式必须是Entra B2C的标准格式:https://<你的租户名>.b2clogin.com/<你的租户名>.onmicrosoft.com/<你的用户流名称>/v2.0/,比如https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_signupsignin/v2.0/

2. 修正Scopes的正确配置

B2C场景下,User.Read这类Microsoft Graph权限默认是不生效的(除非你专门在用户流/自定义策略里集成了Graph),集成测试里更推荐用你自己API的.default范围,这是B2C里获取应用级权限的标准方式:

string[] scopes = new string[] { "api://<你的API应用ID>/.default" };

同时要确保这3个前置配置:

  • 在你的API应用注册的「Expose an API」页面,已经添加了api://<你的API应用ID>/.default这个范围
  • 在API应用的「API permissions」页面,给测试用的客户端应用(即代码里clientId对应的应用)添加了这个权限,并且点击「Grant admin consent for <租户名>」完成管理员授权
  • 测试用户已经被分配了对应的API权限(如果你的API权限设置为需要用户分配的话)

3. 验证用户流/自定义策略的兼容性

如果用的是自定义策略,要确保authority指向自定义策略的终结点;如果是用户流,确认用户流的「Token compatibility settings」里默认启用了v2.0格式(默认就是v2,一般不用改)。

额外优化建议

  • 集成测试里没必要用User.Read这类Graph权限,直接用自己API的.default范围更贴合测试场景
  • 确认测试用户是在Entra B2C租户内创建的,而非外部用户(除非你的测试场景明确需要外部用户)

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:39:34