В пользовательских политиках Azure B2C наши требования к бизнес-процессам означают, что нам нужно контролировать:
Пользователь не может заменить номер мобильного телефона, который у нас есть для записи (т. Е. Опыт установки первого пароля), или
Мы представляем номер, который мы записываем для них по умолчанию, но разрешаем пользователю перезаписывать и сохранять этот номер под новым номером (например, во время входа в систему при редактировании профиля).
Вопрос: могу ли я позволить пользователю заменить номер, который мы записали для него, новым номером, возможно, добавив новую кнопку [Предоставить новый номер] в этой серии:
[Отправить код] [Позвонить мне] [Новая кнопка для ввода нового номера] [Отмена]
Экран PhoneFactor-InputOrVerify (изображение)
Приведенный ниже код является небольшим изменением политики с одноименным названием из B2C Custom Policy Starterpack .
Обратите внимание, что в этом примере мы предоставляем значение номера мобильного телефона, хранящееся в свойстве mobile объекта пользователя, как strongAuthenticationNumber. Это связано с тем, что в настоящее время нет способа программно установить номер MFA . (Спасибо за вашу помощь, Крис Паджетт .)
Кроме этого, политика соответствует стартовому пакету.
<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" /-->
<InputClaim ClaimTypeReferenceId="mobile" PartnerClaimType="strongAuthenticationPhoneNumber" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" PartnerClaimType="Verified.OfficePhone" />
<OutputClaim ClaimTypeReferenceId="newPhoneNumberEntered" PartnerClaimType="newPhoneNumberEntered" />
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-MFA" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
Я подозреваю, что могут быть некоторые настройки метаданных для включения кнопки или поля ввода текста, как описано, но, насколько мне известно, документации для этого пока нет .