如何从 B2C 用户记录中读取移动值并将其转换为 strongAuthenticationPhoneNumber?
How can I read the mobile value from a B2C user record and transform it to a strongAuthenticationPhoneNumber?
我需要以编程方式创建 Azure B2C 用户帐户。在一个单独的用户数据存储中,我保存了我需要在 B2C 中设置的用户的相关信息,包括他们的手机 phone 号码,我们已经通过这些号码与他们进行了沟通。
我的业务需求是此手机 phone 号码在用户首次 login/password 重置体验期间用作次要因素。我有一个初始登录体验,它使用外部创建的 JWT 令牌将用户带到自定义用户旅程,他们可以在其中首次设置密码。
我了解到目前还无法通过 Graph API 或 PowerShell 设置 Azure MFA 手机号码。 (这仍然是真的吗?)。因此,B2C 要求用户在示例 PhoneFactor-InputOrVerify 技术配置文件中输入他们的手机号码。这是一个安全漏洞,因为您可以在那里输入任何手机号码并验证该号码。
我可以轻松地以编程方式将用户号码添加到其他字段 - 例如用户记录上的移动字段。
问题一。
有没有办法读取用户帐户移动值并将其呈现给技术配置文件,就好像它是 strongAuthenticationPhoneNumber 值或 Verified.strongAuthenticationPhoneNumber?
问题二。
这是个好主意吗?我想有充分的理由不这样做,但我无法理解它们可能是什么。
我已经尝试创建新的 ClaimTypes,读取 'mobile' 字段值,创建 ClaimsTranfromations 以尝试使移动声明看起来像是 strongAuthenticationPhoneNumber 声明,并通常尝试 'spoof' 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>
我可以提供更多我之前提到的自定义用户旅程的代码示例,但我认为这不会帮助解决这个问题。
您有几个选择:
- 您可以将 strongAuthenticationPhoneNumber 声明添加到用于入职流程的同一 JWT 并提示在此入职流程期间验证此 phone 号码。
- 您可以从 mobilePhoneFactor-InputOrVerify 技术配置文件映射到 strongAuthenticationPhoneNumber 声明=30=] 属性(或 user 对象的扩展 属性)。
对于选项 1,入门用户旅程应该 write the verified phone number to the user object,没有基于 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>
我需要以编程方式创建 Azure B2C 用户帐户。在一个单独的用户数据存储中,我保存了我需要在 B2C 中设置的用户的相关信息,包括他们的手机 phone 号码,我们已经通过这些号码与他们进行了沟通。
我的业务需求是此手机 phone 号码在用户首次 login/password 重置体验期间用作次要因素。我有一个初始登录体验,它使用外部创建的 JWT 令牌将用户带到自定义用户旅程,他们可以在其中首次设置密码。
我了解到目前还无法通过 Graph API 或 PowerShell 设置 Azure MFA 手机号码。 (这仍然是真的吗?)。因此,B2C 要求用户在示例 PhoneFactor-InputOrVerify 技术配置文件中输入他们的手机号码。这是一个安全漏洞,因为您可以在那里输入任何手机号码并验证该号码。
我可以轻松地以编程方式将用户号码添加到其他字段 - 例如用户记录上的移动字段。
问题一。 有没有办法读取用户帐户移动值并将其呈现给技术配置文件,就好像它是 strongAuthenticationPhoneNumber 值或 Verified.strongAuthenticationPhoneNumber?
问题二。 这是个好主意吗?我想有充分的理由不这样做,但我无法理解它们可能是什么。
我已经尝试创建新的 ClaimTypes,读取 'mobile' 字段值,创建 ClaimsTranfromations 以尝试使移动声明看起来像是 strongAuthenticationPhoneNumber 声明,并通常尝试 'spoof' 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>
我可以提供更多我之前提到的自定义用户旅程的代码示例,但我认为这不会帮助解决这个问题。
您有几个选择:
- 您可以将 strongAuthenticationPhoneNumber 声明添加到用于入职流程的同一 JWT 并提示在此入职流程期间验证此 phone 号码。
- 您可以从 mobilePhoneFactor-InputOrVerify 技术配置文件映射到 strongAuthenticationPhoneNumber 声明=30=] 属性(或 user 对象的扩展 属性)。
对于选项 1,入门用户旅程应该 write the verified phone number to the user object,没有基于 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>