Продолжить путешествие пользователя Azure B2C при сбое аутентификации

Я создаю настраиваемое путешествие пользователя с помощью Azure B2C Identity Experience Framework. Моя проблема в том, что я хочу продолжить путь пользователя, если аутентификация не удалась. Однако похоже, что сбой аутентификации интерпретируется как исключение, из-за которого путешествие завершается.

Это путешествие предназначено для обеспечения своевременного процесса миграции учетной записи от устаревшего поставщика идентификационной информации к B2C.

Поток, которого я пытаюсь достичь, это:

  1. Попытка аутентификации с помощью формы входа B2C
  2. При сбое аутентификации запросите REST API, чтобы определить, существует ли адрес электронной почты пользователя в устаревшей системе.
  3. Если адрес электронной почты существует, предоставьте пользователю форму регистрации B2C.

Возможен ли вообще такой сценарий?


person christok    schedule 11.06.2020    source источник
comment
Привет, Кристок, рассматривали ли вы сначала локальную проверку (а не аутентификацию), чтобы узнать, существует ли пользователь. Если пользователь существует, вызовите вход в систему без взаимодействия. Если нет, то запросите Rest?   -  person Christopher Norris    schedule 11.06.2020
comment
В конце концов, возможно, я должен поступить именно так, но я бы предпочел не делать этого. Причина в накладных расходах: если у пользователя уже есть учетная запись B2C, то нет причин нести затраты ресурсов на выполнение вызова API для получения информации, которую я уже знаю.   -  person christok    schedule 11.06.2020


Ответы (1)


Я не уверен, есть ли способ продолжить полный сбой аутентификации, но вам может не понадобиться это делать, если достаточно просто проверить существование учетной записи пользователя.

Вы можете проверить, существует ли введенное имя пользователя в B2C без попытки аутентификации. Установка для метаданных RaiseErrorIfClaimsPrincipalDoesNotExist значения false позволяет продолжить политику B2C, если пользователь не существует в каталоге. Затем вы можете взять введенное имя пользователя и продолжить работу с другими техническими профилями.

Я использовал приведенный ниже фрагмент в качестве технического профиля проверки, и если идентификатор объекта найден, я запускаю профиль login-NonInteractive, если нет, я запускаю настраиваемый профиль аутентификации

   <TechnicalProfile Id="AAD-UserReadUsingEmailAddress-NoError">
  <Metadata>
    <Item Key="Operation">Read</Item>
    <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
  </InputClaims>
  <OutputClaims>
    <!-- Required claims -->
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
    <OutputClaim ClaimTypeReferenceId="extension_isMigrated" DefaultValue="False" />
    <OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" />
    <!-- Optional claims -->
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
    <OutputClaim ClaimTypeReferenceId="displayName" />
    <OutputClaim ClaimTypeReferenceId="accountEnabled" />
    <OutputClaim ClaimTypeReferenceId="otherMails" />
    <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
    <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
  </OutputClaims>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>
person ToDevAndBeyond    schedule 12.06.2020
comment
Спасибо за идею и извиняюсь за поздний ответ. Я все еще не могу полностью удовлетворить меня, но решение, похоже, запускает цепочку проверочных технических профилей, и ваш фрагмент будет ключом к этому. Я называю это принятым ответом. Спасибо! - person christok; 18.06.2020