繁体   English   中英

在 Azure AD 中创建用户之前,是否可以使用 Azure B2C 自定义策略验证来自社会身份提供者 (iDP) 的 Email 声明?

[英]Is it possible to validate the Email claim from Social Identity Providers (iDPs) using Azure B2C custom policy before creating a User in Azure AD?

场景是这样的:我们已将 Microsoft iDP 添加到我们的应用程序中。 用户可以单击 Microsoft 帐户按钮并使用其 MSA 帐户进行注册\登录。

当用户注册时,我们希望根据我们的数据库验证电子邮件。 如果用户的 email 在我们的数据库中,让他们继续注册; 否则我们想阻止他们注册并显示错误消息。 这将阻止在我们的 Azure B2C AD 中创建用户。

我使用了以下TechnicalProfile

<TechnicalProfile Id="REST-ValidateEmail">
      <DisplayName>Validate Membership Email</DisplayName>
      <Protocol Name="Proprietary" 
        Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">{Settings:AzureAppServiceUrl}/api/User/ValidateEmail</Item>
        <Item Key="AuthenticationType">None</Item>
        <Item Key="SendClaimsIn">Body</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" 
          PartnerClaimType="UserEmail" />
      </InputClaims>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

然后将REST-ValidateEmail添加到LocalAccountSignUpWithLogonEmail作为验证技术配置文件。

<ClaimsProvider>
      <DisplayName>Local Account</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
          <Metadata>
            <!--Demo: disable the email validation in development environment-->
            <!--Demo action required: remove in production environment-->
            <Item Key="EnforceEmailVerification">False</Item>
          </Metadata>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="extension_MembershipEmail" 
              PartnerClaimType="UserEmail" />
          </OutputClaims>
          <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="REST-ValidateEmail" />
            <ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" />
          </ValidationTechnicalProfiles>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>

将 Application Insights 调试添加到自定义策略。 我看到 UserJourney(s) 正在登录 Azure 门户。 但是,无论我做什么,我都看不到来自我编写的 REST API 验证方法的trace日志,也没有调用REST-ValidateEmail 看起来它根本没有被调用。

这个评论

这个从我的自定义策略中调用外部 API 的技巧不起作用,因为我们无法拦截来自社交媒体的登录\注册调用。 I tried creating a REST API that will take email as an input claim in my custom policy(TrustFrameworkExtensions) and further hit Graph API to check that this email exists in B2C or not will work only for local accounts and not for social media accounts.

如果这是真的,我试图让这种情况发挥作用的尝试将不会蓬勃发展。

这个评论成立吗? 如果是,在使用 3rd 方 iDP 时,是否有其他方法可以拦截登录\注册操作?

注1:

探索更多的TrustFrameworkBase.xml文件我看到了这个技术简介SelfAsserted-Social 我想我将不得不使用它而不是LocalAccountSignUpWithLogonEmail

是的,注意 1我在上面的问题中添加的是 go 的方式。

刚刚使用SelfAsserted-Social技术配置文件而不是LocalAccountSignUpWithLogonEmail测试了该场景。

它起作用了,并且按预期调用了 rest API。 我可以在应用服务的日志 stream 中看到尝试的痕迹和电子邮件。

提供无效电子邮件时,用户可以看到从自定义验证端点返回的错误消息。

这是TrustFrameworkExtensions.xml中覆盖\补充的技术配置文件:

<ClaimsProvider>
  <DisplayName>Self Asserted</DisplayName>
  <TechnicalProfiles>

    <TechnicalProfile Id="SelfAsserted-Social">
      <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="REST-ValidateEmail" />
      </ValidationTechnicalProfiles>
    </TechnicalProfile>

  </TechnicalProfiles>
</ClaimsProvider>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM