Как избежать исключений при предоставлении ClaimsProviderSelection после входа в систему?

Я пытаюсь реализовать поток, который позволяет пользователю выбирать один из нескольких вариантов проверки, используя <OrchestractionStop Type="ClaimsProviderSelection"...>

Мой поток работает должным образом, когда я указываю только один <ClaimsProviderSelection>, но когда я указываю несколько <ClaimsProviderSelections>, мой поток B2C вылетает из-за общего AADB2C: Возникло исключение. сообщение.

Как мне правильно указать нескольких поставщиков претензий?

Изменить: обновить

Похоже, это связано с тем, как я вхожу в систему пользователей на предыдущих этапах: если я запустил локальный вход в учетную запись и прочитал профиль AAD (из базовых политик) после моего собственного выбора поставщика утверждений, все будет работать, как ожидалось. Если я вообще не войду в систему, все также будет работать должным образом. Проблема возникает только в том случае, если я вхожу в систему перед шагом ClaimsProviderSelection.

Изменить: подробности

Сбой происходит, когда выбор IDP должен быть представлен пользователю до фактического отображения выбора.

URI данных для определения содержимого api.idpselection - urn:com:microsoft:aad:b2c:elements:contract:providerselection:1.2.0.

Код:

Это работает:

  <OrchestrationStep Order="3" Type="ClaimsProviderSelection" ContentDefinitionReferenceId="api.idpselections">
          <ClaimsProviderSelections DisplayOption="ShowSingleProvider">
            <ClaimsProviderSelection TargetClaimsExchangeId="SelfAssertPassportVerification" />
          </ClaimsProviderSelections>
        </OrchestrationStep>

        <OrchestrationStep Order="4" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="SelfAssertPassportVerification" TechnicalProfileReferenceId="Self-Assert-PassportVerification" />
          </ClaimsExchanges>
        </OrchestrationStep>

Это работает:

    <OrchestrationStep Order="3" Type="ClaimsProviderSelection" ContentDefinitionReferenceId="api.idpselections">
          <ClaimsProviderSelections DisplayOption="ShowSingleProvider">
            <ClaimsProviderSelection TargetClaimsExchangeId="SelfAssertDriversLicenseVerification" />
          </ClaimsProviderSelections>
        </OrchestrationStep>

        <OrchestrationStep Order="4" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="SelfAssertDriversLicenseVerification" TechnicalProfileReferenceId="Self-Assert-DLVerification" />
          </ClaimsExchanges>
        </OrchestrationStep>

Это не работает:

  <OrchestrationStep Order="3" Type="ClaimsProviderSelection" ContentDefinitionReferenceId="api.idpselections">
          <ClaimsProviderSelections DisplayOption="ShowSingleProvider">
            <ClaimsProviderSelection TargetClaimsExchangeId="SelfAssertPassportVerification" />
            <ClaimsProviderSelection TargetClaimsExchangeId="SelfAssertDriversLicenseVerification" />
          </ClaimsProviderSelections>
        </OrchestrationStep>

        <OrchestrationStep Order="4" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="SelfAssertPassportVerification" TechnicalProfileReferenceId="Self-Assert-PassportVerification" />
            <ClaimsExchange Id="SelfAssertDriversLicenseVerification" TechnicalProfileReferenceId="Self-Assert-DLVerification" />
          </ClaimsExchanges>
        </OrchestrationStep>

person iris-HP    schedule 24.12.2020    source источник
comment
У вас есть опечатка в DisplayOption = ShowSingleProvier, и я думаю, следует ли установить это значение, если вы пытаетесь показать несколько.   -  person Adam Winter    schedule 24.12.2020
comment
Спасибо, @ Адам. Это просто ошибка транскрипции в моем коде. Отредактирую вопрос, чтобы исправить. Согласно документам атрибут имеет только эффекты когда присутствует одна опция, а ShowSingleProvider - единственное допустимое значение. В любом случае я попытался полностью удалить этот атрибут и обнаружил ту же проблему.   -  person iris-HP    schedule 24.12.2020
comment
Привет, Ирис, не могли бы вы показать нам, какое определение содержимого DataUri вы используете для api.idpselections? Кроме того, вы можете сказать нам, где в потоке он вылетает? Вылетает ли он, как только вы выполняете политику? Или он вылетает при нажатии на выбор IDP?   -  person Christopher Norris    schedule 28.12.2020
comment
Спасибо @ChristopherNorris. Поток аварийно завершает работу, когда достигает потенциального ClaimsProviderSelection шага до того, как будут представлены выбранные IDP. Мой DataUri для определения api.idpselections - urn:com:microsoft:aad:b2c:elements:contract:providerselection:1.2.0.   -  person iris-HP    schedule 30.12.2020
comment
@ iris-HP. Не могли бы вы поговорить об этом и показать больше вашего кода? Я считаю это интересной проблемой.   -  person Christopher Norris    schedule 30.12.2020
comment
@ChristoperNorris. Я вернусь к вам по этому поводу. На данный момент я отправил отчет об ошибке в MS - я полагаю, что либо их документация, либо реализация неверны (github.com/MicrosoftDocs/azure-docs/issues/68117). Если они не могут предоставить больше информации, я постараюсь предоставить отредактированную версию некоторых наших политик для обсуждения, спасибо.   -  person iris-HP    schedule 02.01.2021


Ответы (1)


Вы пробовали это?

<OrchestrationStep Order="3" Type="ClaimsProviderSelection" ContentDefinitionReferenceId="api.idpselections">
      <ClaimsProviderSelections DisplayOption="ShowSingleProvider">
        <ClaimsProviderSelection TargetClaimsExchangeId="SelfAssertPassportVerification" />
      </ClaimsProviderSelections>
      <ClaimsProviderSelections DisplayOption="ShowSingleProvider">
        <ClaimsProviderSelection TargetClaimsExchangeId="SelfAssertDriversLicenseVerification" />
      </ClaimsProviderSelections>
</OrchestrationStep>

<OrchestrationStep Order="4" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="SelfAssertPassportVerification" TechnicalProfileReferenceId="Self-Assert-PassportVerification" />
      </ClaimsExchanges>
      <ClaimsExchanges>
        <ClaimsExchange Id="SelfAssertDriversLicenseVerification" TechnicalProfileReferenceId="Self-Assert-DLVerification" />
      </ClaimsExchanges>
</OrchestrationStep>
person Adam Winter    schedule 25.12.2020
comment
К сожалению, это не работает. Первый ClaimsProviderSelection запускает первую опцию проверки, а затем переходит к следующему шагу 4, чтобы никогда не возвращаться. Это похоже на ошибку в B2C, чем больше я играю с ней: выполнение шага ClaimsProviderSelection после шага CombinedSignInAndSIgnUp вызывает ошибку - забавно, если я сделаю это наоборот - получите учетные данные документа, удостоверяющего личность, от пользователя, прежде чем я предложу войти в систему, все работает так, как ожидалось ... но это противоречит здравому смыслу с точки зрения пользователя. - person iris-HP; 26.12.2020