Azure B2C注册遇AADB2C90261错误及MFA不显示问题求助
错误AADB2C90261含义
AADB2C90261 错误明确表示:Azure B2C在执行步骤1中名为PreUserWriteRestful的声明交换(Claims Exchange)时,收到的HTTP响应无法被解析,400状态码说明请求本身不符合要求,或者后端服务(你的Azure函数)返回的内容格式不满足B2C的规范。
可能遗漏的步骤与排查方向
1. Azure函数响应格式不符合B2C要求
Azure B2C对REST API的响应格式有严格要求,无论验证成功或失败,都必须返回结构正确的JSON:
- 成功响应示例:
{"version":"1.0.0","status":"200","userMessage":"Captcha verified successfully"} - 失败响应示例:
{"version":"1.0.0","status":"400","userMessage":"Invalid captcha response"}
如果你的Azure函数返回的JSON缺少version、status等必填字段,或者存在语法错误(比如逗号遗漏、引号不匹配),B2C就会触发解析失败错误。
排查动作:用Postman直接调用Azure函数的端点,模拟B2C的请求(POST方法,携带captchaResponse参数),检查返回的JSON结构是否完全符合上述规范。
2. reCAPTCHA验证逻辑存在问题
- 确认Azure函数中使用的Google reCAPTCHA密钥(Site Key和Secret Key)正确无误,且Secret Key没有泄露或权限限制。
- 检查函数调用Google reCAPTCHA验证API的逻辑:是否正确传递了用户提交的
captchaResponse,是否处理了API返回的验证结果,并且将结果转换成B2C要求的响应格式。 - 如果reCAPTCHA验证失败,必须返回
status:400的结构化错误,而不是直接返回HTTP 400状态码却不带符合要求的JSON内容。
排查动作:查看Azure函数的日志(门户中函数的“监控”->“日志”),确认reCAPTCHA验证过程是否有报错,比如密钥错误、网络连接问题。
3. 自定义策略(User Flow)配置错误
- 检查自定义策略中
PreUserWriteRestful的声明交换配置:确保Endpoint URL正确指向你在门户创建的Azure函数,HTTP方法(POST)与函数的触发方式匹配,且声明映射正确(比如将用户提交的captchaResponse传递给函数)。 - 确认自定义策略中已正确定义
captchaResponse声明,并在注册流程中要求收集该声明(关联到自定义页面的reCAPTCHA字段)。
排查动作:对比教程中的策略XML,检查你的配置是否遗漏了声明定义、声明交换的参数映射等关键部分。
4. Azure函数的CORS与权限配置
- 确保Azure函数的CORS设置允许B2C租户域名访问(添加
https://<你的租户名>.b2clogin.com到允许的来源列表),否则B2C调用函数时会出现跨域错误,导致响应异常。 - 检查Azure函数的访问权限:如果设置了非匿名访问,需确保B2C能正确认证;建议先设置为匿名访问,验证功能正常后再调整权限。
5. 自定义注册页面的reCAPTCHA集成问题
- 确认自定义页面中的reCAPTCHA脚本正确加载,且
g-recaptcha-response的值被正确绑定到B2C的表单字段(即captchaResponse声明)。如果这个值没有被传递给B2C,Azure函数会收到空的验证参数,导致验证失败并返回错误响应。
排查动作:在浏览器开发者工具中查看注册表单提交时的请求,确认captchaResponse字段是否被正确包含在请求数据中。
关于MFA不显示的问题
由于移除MFA后错误仍然存在,说明MFA问题是次要的,根源还是在验证码相关的流程中。当B2C在PreUserWriteRestful步骤遇到错误时,会直接终止流程,不会进入后续的MFA环节。解决上述验证码相关问题后,再重新排查MFA配置(比如确认自定义策略中已启用MFA步骤,且触发条件正确)。
类似问题反馈
不少开发者在Azure B2C集成reCAPTCHA时遇到过相同错误,常见原因包括:
- 函数返回的JSON格式不符合B2C规范(比如缺少
version字段) - reCAPTCHA密钥配置错误
- 自定义策略中声明映射遗漏
- CORS配置导致跨域请求失败
内容的提问来源于stack exchange,提问作者SilviuM

