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

如何自定义Azure AD B2C自定义策略中REST API调用失败的错误页面

Azure AD B2C 自定义策略REST API调用失败场景的错误页自定义方案

完全可以自定义该场景下的错误页面,根据需求不同有两种可落地的实现方式,以下是具体配置说明:

方案1:直接替换系统默认全局错误页

你看到的微软默认错误提示属于B2C的全局异常页,对应自定义策略里固定Id为api.error的内容定义,只要给该内容定义配置你自己的自定义HTML页面地址,就能全量替换所有未捕获异常(包括当前REST调用4xx/5xx失败场景)的默认错误页:

  1. 在自定义策略的BuildingBlocks > ContentDefinitions节点下添加如下配置:
<ContentDefinition Id="api.error">
  <!-- 替换成你自己部署的自定义错误页的公开访问地址 -->
  <LoadUri>https://你的存储服务地址/custom-error.html</LoadUri>
  <DataUri>urn:com:microsoft:aad:b2c:elements:contract:globalexception:1.2.0</DataUri>
  <Metadata>
    <Item Key="TemplateId">azureBlue</Item>
  </Metadata>
</ContentDefinition>
  1. 自定义HTML页面需要符合B2C页面渲染规范,在页面正文预留<div id="api"></div>占位节点,B2C会自动将错误信息注入该节点,你可以自由定义页面的品牌样式、导航栏、底部信息、客服入口等内容,完全覆盖默认的微软页面样式。

你当前在REST TechnicalProfile中配置的DefaultUserMessageIfRequestFailed参数,在配置完上述自定义错误页后会自动生效,替换默认的英文错误提示文案。


方案2:捕获REST调用错误,走专属业务错误页

如果你不希望REST调用失败时跳全局通用错误页,需要根据接口返回的错误码展示不同提示、或者提供重试/返回上一步等交互能力,可以通过捕获错误声明的方式走自定义编排流程:

  1. 首先在策略的ClaimsSchema节点下提前定义两个字段,用于接收REST接口返回的错误信息:
<ClaimType Id="restErrorCode">
  <DisplayName>REST接口错误码</DisplayName>
  <DataType>string</DataType>
</ClaimType>
<ClaimType Id="restErrorMessage">
  <DisplayName>REST接口错误信息</DisplayName>
  <DataType>string</DataType>
</ClaimType>
  1. 修改你当前的REST调用TechnicalProfile,补充元数据配置和输出声明映射,接住接口返回的错误内容:
<TechnicalProfile Id="Some-Rest API">
  <DisplayName>REST  call</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ServiceUrl">https://{url}</Item>
    <Item Key="AuthenticationType">Bearer</Item>
    <Item Key="SendClaimsIn">Url</Item>
    <Item Key="UseClaimAsBearerToken">token</Item>
    <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
    <Item Key="AllowInsecureAuthInProduction">false</Item>
    <Item Key="DefaultUserMessageIfRequestFailed">Unable to Process your Request</Item>
    <!-- 新增以下两个配置 -->
    <Item Key="ResolveJsonPathsInJsonTokens">true</Item>
    <Item Key="RaiseErrorIfClaimsExchangeFailed">false</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="token" />
    <InputClaim ClaimTypeReferenceId="objectId" />
  </InputClaims>
  <!-- 新增输出声明,映射REST接口错误响应体里的字段 -->
  <OutputClaims>
    <!-- PartnerClaimType对应你的REST接口4xx/5xx响应里的错误码字段名 -->
    <OutputClaim ClaimTypeReferenceId="restErrorCode" PartnerClaimType="code" DefaultValue="" />
    <!-- PartnerClaimType对应你的REST接口4xx/5xx响应里的错误提示字段名 -->
    <OutputClaim ClaimTypeReferenceId="restErrorMessage" PartnerClaimType="message" DefaultValue="" />
  </OutputClaims>
</TechnicalProfile>
  1. 在REST调用的编排步骤(Order=5)之后,新增一个编排步骤,通过声明转换判断REST调用是否出错,如果出错就跳转到你自定义的自断言错误页面,在该页面中你可以自由配置展示内容、交互按钮,不需要受全局错误页的限制。

注意事项

  • 方案1配置简单,适合只需要统一品牌视觉、不需要针对REST错误做特殊交互的场景,配置后所有B2C流程的未捕获异常都会展示该自定义页面。
  • 方案2灵活性更高,适合需要针对当前REST接口错误做精细化提示、业务跳转的场景,不会触发全局异常页。
  • 所有自定义HTML页面必须开启CORS允许你的B2C租户域名跨域访问,否则B2C无法正常加载页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:06:20