Требуется, чтобы пользовательская политика Azure B2C использовала пользовательскую страницу ошибок (и передавала значение)

#azure #authentication #azure-ad-b2c #azure-ad-b2c-custom-policy

#azure #аутентификация #azure-ad-b2c #azure-ad-b2c-custom-policy

Вопрос:

ОБНОВЛЕНИЕ: я наконец-то могу получить свою пользовательскую страницу ошибок для рендеринга. Я должен был использовать <div id="api"></div> , на мой взгляд.

Моя последняя забота здесь, которая кажется невозможной, — это добавление значения одного из моих утверждений (из idToken, переданного моей политике B2C, когда я ее вызываю) в LoadUri моего contentdefinition.

Вот мои технические профили:

 <TechnicalProfile Id="SelfAsserted-SigningNotReadyError">
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="GetUser" />
  </InputClaimsTransformations>
  <IncludeTechnicalProfile ReferenceId="SelfAsserted-UserError" />
</TechnicalProfile>

<TechnicalProfile Id="SelfAsserted-UserError">
  <DisplayName>Unsolicited error message</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ContentDefinitionReferenceId">api.signingerrorlink</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="errorMessage" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="errorMessage" />
  </OutputClaims>
</TechnicalProfile>
 

и мое определение содержания
Примечание: посмотрите, как я должен жестко кодировать идентификатор GUID. 🙁
signingerror?user=7ec00437-1ad9-4acc-a285-a729003ca99d

 <ContentDefinition Id="api.signingerrorlink">
  <LoadUri>https://something.azurewebsites.net/signingerror?user=7ec00437-1ad9-4acc-a285-a729003ca99d</LoadUri>
  <RecoveryUri>https://something.azurewebsites.net/error</RecoveryUri>
  <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:1.2.0</DataUri>
  <Metadata>
    <Item Key="DisplayName">Signing Not Ready</Item>
  </Metadata>
</ContentDefinition>

 

ОРИГИНАЛ:

Я здесь в затруднительном положении. Я просматривал много сообщений в stackoverflow и в Интернете в целом. Я надеюсь, что вы сможете мне помочь.

У меня есть пользовательская политика B2C, которая в основном принимает токен, выполняет некоторые функции, а затем возвращает токен доступа в конце. Это работает нормально. Моя проблема заключается в том, что мне нужно определить шаг, который вызовет технический профиль на основе предварительного условия. Предварительное условие на самом деле хорошо работает.

Чего мне не хватает, так это способа создания technicalprofile / contentdefinition для загрузки моей собственной страницы ошибок (контроллер .Net Core 3) в другой проект, но полностью доступный (контроллеры / SigningErrorController).

Мой шаг:

         <OrchestrationStep Order="7" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
              <Value>isReadyForSigning</Value>
              <Value>True</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <ClaimsExchanges>
            <ClaimsExchange Id="SelfAsserted-SigningNotReady" TechnicalProfileReferenceId="SelfAsserted-SigningNotReadyError" />
          </ClaimsExchanges>
        </OrchestrationStep>
 

Часть 2! Мне нужно передать значение на эту пользовательскую страницу ошибок. Идентификатор guid в данном случае.

Если я использую TP для invalidlink, это сработает. Я пробовал различные пользовательские определения содержимого, похожие на:

       <ContentDefinition Id="api.signingerrorlink">
        <LoadUri>https://something.azurewebsites.net/error</LoadUri>
        <RecoveryUri>https://something.azurewebsites.net/signingerror</RecoveryUri>
        <DataUri>urn:com:microsoft:aad:b2c:elements:globalexception:1.1.0</DataUri>
        <Metadata>
          <Item Key="DisplayName">Error page</Item>
        </Metadata>
      </ContentDefinition>
 

… с ошибкой подписи, являющейся пользовательской страницей ошибок, на которую я хочу перейти.
Если я запускаю это, политика просто полностью пропускает этот шаг. Если я использую недопустимую ссылку TP, тогда она работает. Я также попытался выяснить, как передать значение на страницу ошибок. Я в недоумении, ребята.

Мы будем признательны за любую помощь, которую вы можете оказать.

Комментарии:

1. Я пробовал что-то подобное, что, как я надеялся, приведет к значению утверждения ‘packageUserId’ и передаст его для ‘user’, оно просто заканчивается как ‘?user = packageUserId’, и это влияет на каждое определение содержимого. Я также пробовал {packageUserId} и варианты. « <Поведение пользователя> … <ContentDefinitionParameters> <Имя параметра=»user»>{OAUTH-KV:packageUserId}</Parameter> </ContentDefinitionParameters> </UserJourneyBehaviors> «

Ответ №1:

Вы можете использовать распознаватель утверждений в элементе LoadUri. Например.:

 <ContentDefinition Id="api.signingerrorlink">
  <LoadUri>https://something.azurewebsites.net/signingerror?user={Claim:packageUserId}</LoadUri>
  <RecoveryUri>https://something.azurewebsites.net/error</RecoveryUri>
  <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:1.2.0</DataUri>
  <Metadata>
    <Item Key="DisplayName">Signing Not Ready</Item>
  </Metadata>
</ContentDefinition>
 

https://docs.microsoft.com/en-us/azure/active-directory-b2c/claim-resolver-overview#content-definition