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

如何从Azure AD B2C登录页提取邮箱地址给自定义第三方身份提供商

解决Azure AD B2C自定义提供商登录时捕获邮箱的问题

1. 定义邮箱声明

在TrustFrameworkExtensions.xml的<ClaimsSchema>中确认已定义email声明,若未定义则添加:

<ClaimsSchema>
  <ClaimType Id="email">
    <DisplayName>邮箱地址</DisplayName>
    <DataType>string</DataType>
    <UserInputType>TextBox</UserInputType>
    <Restriction>
      <Pattern>^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$</Pattern>
    </Restriction>
  </ClaimType>
</ClaimsSchema>

2. 调整CombinedSignInAndSignUp编排步骤

修改编排步骤的配置,给自定义提供商的选择项添加验证用的ClaimsExchange,确保点击按钮时先收集邮箱:

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
    <!-- 新增ValidationClaimsExchangeId,触发邮箱收集流程 -->
    <ClaimsProviderSelection TargetClaimsExchangeId="CustomProvider" ValidationClaimsExchangeId="CollectEmailForCustomProvider" />
    <ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
  </ClaimsProviderSelections>
  <ClaimsExchanges>
    <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
    <!-- 添加收集邮箱的ClaimsExchange -->
    <ClaimsExchange Id="CollectEmailForCustomProvider" TechnicalProfileReferenceId="SelfAsserted-CollectEmail" />
  </ClaimsExchanges>
</OrchestrationStep>

3. 创建收集邮箱的自我断言技术配置

在<TechnicalProfiles>节点下添加专门用于收集邮箱的配置,仅展示邮箱输入框:

<TechnicalProfile Id="SelfAsserted-CollectEmail">
  <DisplayName>为自定义提供商收集邮箱</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.selfasserted</Item>
    <Item Key="language.button_continue">继续</Item>
  </Metadata>
  <InputClaims />
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" Required="true" />
  </OutputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

4. 在自定义提供商技术配置中传递邮箱

修改自定义提供商对应的TechnicalProfile,将收集到的email声明作为请求参数传递给第三方提供商(以下以OIDC协议为例):

<TechnicalProfile Id="CustomProvider">
  <DisplayName>自定义提供商</DisplayName>
  <Protocol Name="OpenIdConnect" />
  <Metadata>
    <Item Key="client_id">你的客户端ID</Item>
    <Item Key="metadata">https://你的提供商地址/.well-known/openid-configuration</Item>
    <Item Key="response_types">code</Item>
    <!-- 其他提供商元数据配置 -->
  </Metadata>
  <InputClaims>
    <!-- 将email声明映射到提供商所需的参数,比如login_hint -->
    <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="login_hint" />
  </InputClaims>
  <OutputClaims>
    <!-- 按需配置输出声明 -->
  </OutputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
</TechnicalProfile>

核心逻辑说明

当用户点击「使用自定义提供商登录」按钮时,系统会先触发CollectEmailForCustomProvider流程,引导用户输入邮箱;收集完成后,email声明会被传入自定义提供商的技术配置,作为请求参数发送给第三方服务,实现带邮箱的委托认证。

内容的提问来源于stack exchange,提问作者Aaron Zhong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:26:04