如何处理未与Azure联合的域点击WorkAccount时的错误
没问题,咱们来解决这个问题——你想用自定义的用户通知替换掉Azure AD返回的、针对未联合域的错误页,结合你的Custom SignUpSignIn策略,具体可以按以下步骤实现:
解决方案步骤
1. 捕获Azure AD联合失败的特定错误码
当用户输入未与Azure AD联合的域邮箱时,Azure AD会返回明确的错误代码(典型的是AADSTS50105,含义为“用户的域未配置联合身份验证”)。我们需要先在自定义策略中配置捕获这个错误码,触发后续的自定义通知逻辑。
2. 定义自定义错误通知页面的内容
在策略的<ContentDefinitions>节点下,添加一个新的内容定义,指向你自己托管的自定义通知页面:
<ContentDefinition Id="api.error.unfederatedDomain"> <LoadUri>~/tenant/templates/AzureBlue/custom-unfederated-error.html</LoadUri> <RecoveryUri>~/common/default_page_error.html</RecoveryUri> <DataUri>urn:com:microsoft:aad:b2c:elements:contract:globalexception:1.2.0</DataUri> <Metadata> <Item Key="DisplayName">Custom Unfederated Domain Error Page</Item> </Metadata> </ContentDefinition>
其中custom-unfederated-error.html是你自定义的页面,内容可以是类似“抱歉,你的邮箱所属域未与Azure AD联合,请选择其他登录方式或联系管理员”的友好提示,记得页面要托管在HTTPS可访问的地址上。
3. 修改用户旅程,添加错误处理分支
找到你SignUpSignIn用户旅程中调用Azure AD身份提供者的编排步骤,新增错误处理逻辑,当捕获到目标错误时跳转到自定义页面:
<OrchestrationStep Order="[对应步骤序号]" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AzureADExchange" TechnicalProfileReferenceId="AzureAD-Common" /> </ClaimsExchanges> <ErrorClaimsExchange> <ErrorClaimsExchange Id="HandleUnfederatedError" TechnicalProfileReferenceId="UnfederatedDomainErrorHandler" /> </ErrorClaimsExchange> </OrchestrationStep>
4. 创建错误处理的技术配置文件
在<ClaimsProviders>节点下,添加一个专门处理该错误的技术配置文件,负责将用户引导到自定义通知页面:
<ClaimsProvider> <DisplayName>Custom Error Handler</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="UnfederatedDomainErrorHandler"> <DisplayName>Unfederated Domain Error Handler</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ContentDefinitionReferenceId">api.error.unfederatedDomain</Item> </Metadata> <OutputClaims> <OutputClaim ClaimTypeReferenceId="errorMessage" DefaultValue="抱歉,你的邮箱所属域未与Azure AD联合,请选择其他登录方式或联系管理员。" /> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
5. 配置Azure AD技术配置文件的错误匹配规则
在你的Azure AD技术配置文件(通常是AzureAD-Common)中,添加元数据指定要捕获的错误码:
<TechnicalProfile Id="AzureAD-Common"> <!-- 其他已有配置 --> <Metadata> <Item Key="ValidErrorCodes">AADSTS50105</Item> </Metadata> </TechnicalProfile>
如果有其他相关错误码需要处理,可以用逗号分隔添加多个,比如AADSTS50105,AADSTSXXXX。
额外注意事项
- 自定义页面必须通过HTTPS访问,Azure AD B2C不允许加载HTTP页面。
- 可以根据品牌需求自定义页面样式,保持和你的登录流程视觉一致。
- 测试时可以用一个未联合的域邮箱登录,验证是否正确跳转到自定义通知页面。
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

