Azure B2C 示例 - SignUpOrSignInWithPhoneOrEmail - 跳过电子邮件收集步骤

Azure B2C samples - SignUpOrSignInWithPhoneOrEmail - skip email collection step

我目前正在使用来自 B2C 示例的 SignUpOrSignInWithPhoneOrEmail.xml 文件,我想知道是否有其他人能够弄清楚如何修改自定义模板以在用户使用时完全跳过电子邮件收集步骤通过 phone 号码注册。我正在开发的国家/地区的电子邮件使用率很低 - phone 号码是我们唯一可以依赖的识别信息。

我尝试的第一件事就是简单地从此处定义的用户旅程中删除电子邮件收集步骤:

<OrchestrationStep Order="3" Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
      <Value>isLocalAccountSignIn</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
      <Value>isEmailSignUp</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="SignUpWithPhone_CollectEmailAddress" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonPhoneNumber_CollectEmailAddress" />
  </ClaimsExchanges>
</OrchestrationStep>

但这只是导致抛出错误 - 可能是因为进一步的 TechnicalProfileUserJourney 定义之一以我尚未破译的方式依赖它。

之后,我尝试将声明标记为不需要,如下所示

 <OutputClaim ClaimTypeReferenceId="email" Required="false" />

这给了我预期的行为(可以在不验证的情况下填充该字段)- 但这看起来更糟,我想完全删除该步骤。

我对自定义策略非常陌生,感觉我正在寻找的答案可能很明显 - 任何帮助都将不胜感激。

编辑:我的要求是用户可以 login/register 使用他们的 email/phone 独占(和 link phone 号码的电子邮件地址)。从那以后,我找到了一个允许这种行为的示例 here.

请允许我在这里突出显示一个关键字:SignUpOrSignInWithPhoneOrEmail。是的,说 Or,不是 AND。啊。太蹩脚了。您的 phone-only 场景完全有效,原因如您所述,但使用 b2c 并不 in-the-box 简单。

我发现这个 post 可能有用: https://docs.microsoft.com/en-us/answers/questions/115660/azure-ad-b2c-sign-up-with-phone.html

基本上,您需要使用 SocialAndLocalAccountsWithMfa 模板。

还发现这个可能有用: https://blog.hametbenoit.info/2019/12/19/azure-ad-b2c-new-phone-sign-in-authentication-method-available-preview

与此同时...对于 Microsoft 来说,如果能够为普通人开发自定义策略是一个非常好的主意,而不需要我们剖析巨大的 XML 文件并花费数小时和数小时尝试连接其中每行之间的点,以及最后UI中的效果。

这里有个例子,用phone旅程做一个纯签到。

https://github.com/azure-ad-b2c/samples/tree/master/policies/signup-signin-with-phone-number

在这里您可以了解架构的工作原理 https://github.com/azure-ad-b2c/azureadb2ccommunity.io/wiki

我花了一周的时间学习并反复试验 - 但我能够拼凑出满足我要求的东西。我不是专家 - 所以我不能保证它是完美的,但我已经将示例上传到 Github,如果您有兴趣可以查看 here

对于那些想知道为什么简单地删除步骤 3 不起作用的人来说,这是因为步骤使用 ID 为 LocalAccountSignUpWithLogonPhoneNumber_CollectEmailAddress 的技术配置文件,并且此技术配置文件调用 AAD-UserWriteUsingLogonPhoneNumber 作为验证配置文件。 AAD-UserWriteUsingLogonPhoneNumber 负责将用户数据写入 Azure AD。步骤 4+ 依赖于用户已经在 AD 中的事实,因此 - 他们失败了。

如果您是 B2C 自定义策略的新手 - 我强烈推荐 this series 篇博客文章,让您快速上手 运行。