我需要以编程方式创建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,入职用户旅程应将经过验证的电话号码写入用户对象,而无需基于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] 删除。
我来说两句