如何从B2C用户记录中读取移动值并将其转换为strongAuthenticationPhoneNumber?

波浪戴夫

我需要以编程方式创建Azure B2C用户帐户。在单独的用户数据存储区中,我保存了有关我需要在B2C中设置的用户的相关信息,包括他们的手机号码,我们已经在与他们进行通信了。

我的业务要求是在用户首次登录/重置密码期间,将此手机号码用作辅助因素。我有一个初始登录体验,该体验使用外部创建的JWT令牌将用户带到自定义用户旅程,他们可以在其中首次设置密码。

我了解尚无法通过Graph API或PowerShell设置Azure MFA手机号码。(这仍然是真的吗?)。因此,B2C要求用户在示例性的PhoneFactor-InputOrVerify技术资料中输入其手机号码。这是一个安全漏洞,因为您可以在其中输入任何手机号码并验证该号码。

我可以轻松地以编程方式将用户的号码添加到其他字段,例如用户记录中的移动字段。

问题1.是否可以读取用户帐户移动值并将其显示为技术资料,就像是StrongAuthenticationPhoneNumber值还是Verified.strongAuthenticationPhoneNumber?

问题2。这甚至是个好主意吗?我认为有充分的理由不这样做,但是我无法理解它们可能是什么。

我尝试创建新的ClaimTypes,读取“移动”字段值,创建ClaimsTranfromations来尝试使移动声明看起来像是StrongAuthenticationPhoneNumber声明,并尝试“欺骗” B2C认为这是存储在其中的实际数字。 MFA数据存储。

这是入门包中的标准PhoneFactor-InputOrVerify技术资料:

<ClaimsProvider>
  <DisplayName>PhoneFactor</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="PhoneFactor-InputOrVerify">
      <DisplayName>PhoneFactor</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.PhoneFactorProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ContentDefinitionReferenceId">api.phonefactor</Item>
        <Item Key="ManualPhoneNumberEntryAllowed">true</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
      </CryptographicKeys>
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="CreateUserIdForMFA" />
      </InputClaimsTransformations>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="userIdForMFA" PartnerClaimType="UserId" />
        <InputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" PartnerClaimType="Verified.OfficePhone" />
        <OutputClaim ClaimTypeReferenceId="newPhoneNumberEntered" PartnerClaimType="newPhoneNumberEntered" />
      </OutputClaims>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-MFA" />
    </TechnicalProfile>

  </TechnicalProfiles>
</ClaimsProvider>

我可以提供前面提到的自定义用户旅程的更多代码示例,但是我认为这不会对解决此问题有所帮助。

克里斯·帕吉特

您有几种选择:

  1. 您可以将strongAuthenticationPhoneNumber声明添加到用于入职流程的同一JWT中,并在此入职流程中提示您验证此电话号码。
  2. 您可以用户对象移动属性(或扩展属性)映射到PhoneFactor-InputOrVerify技术配置文件strongAuthenticationPhoneNumber声明

对于选项1,入职用户旅程应将经过验证的电话号码写入用户对象,而无需基于newPhoneNumberEntered的前提:

<OrchestrationStep Order="8" Type="ClaimsExchange">
  <ClaimsExchanges>
    <ClaimsExchange Id="AADUserWriteWithObjectId" TechnicalProfileReferenceId="AAD-UserWritePhoneNumberUsingObjectId" />
  </ClaimsExchanges>
</OrchestrationStep>

对于选项2,您可以映射到mobile属性中strongAuthenticationPhoneNumber声明,如下所示:

<InputClaims>
  <InputClaim ClaimTypeReferenceId="userIdForMFA" PartnerClaimType="UserId" />
  <InputClaim ClaimTypeReferenceId="mobile" PartnerClaimType="strongAuthenticationPhoneNumber" />
</InputClaims>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在C#中读取指针的值并将其转换为字符串?

如何从图像读取迷宫并将其转换为Python中的二进制值

如何分隔列中的值并将其转换为数值?

如何从文件中读取数据,然后将数据转换为int并将其存储在向量中

如何读取Json文件并将其转换为数据框

如何读取xml数据并将其转换为数组

读取BLOB列并将其转换为文件中的xml

从文件中读取JavaScript对象并将其转换为对象

从文件中读取元组并将其转换为列表

读取Java中的hex文件并将其转换为ascii

如何从Android Studio中的用户获取数值的输入并将其转换为Kotlin中的int变量?

如何正确读取流量<DataBuffer中>,并将其转换为一个单一的inputStream

如何在R中读取Parquet并将其转换为R DataFrame?

如何从文件中读取原始PCM数据并将其转换为float?

读取 MySQL JSON 数据类型并将其转换为 C# 中的 List<Int>

从网页读取JSON文件并将其转换为C#中的List <Object>

如何扫描用户输入并将其转换为公历

Firestore:Javascript:如何将用户输入转换为数组并将其存储在 Firestore 中?

如何从行中删除重复项并将其值转换为pandas中的列

我如何转换数据库中的特定表记录并将其转换为python中的markdown和.rst文件

如何获取二进制文件,读取它,将其转换为可用数据并将其存储到ArrayList中

如何解析JSON并将其值转换为Array?

如何将值转换为float并将其分配给Python中的字典?

如何读取蓝牙特性并将其从字节数据转换为适当的值(用于抖动的蓝牙)

读取txt的第一行并将其转换为int,但返回另一个值[C]

如何从Azure AD B2C用户配置文件编辑过程中获取对象ID值

获取最大数组并将其转换为 C 中的 2x2 数组

如何读取csv文件并将其放入变量中以与C#中的给定值进行比较

如何在Yii2中创建关联数组并将其转换为JSON?