希望让 Azure B2C 自定义策略使用自定义错误页面(并传递一个值)

Looking to have Azure B2C custom policy use a custom error page (and pass a value)

更新: 我终于能够呈现我的自定义错误页面。我不得不使用 <div id="api"></div> 在我看来。

我最后关心的是,这似乎是不可能的,是将我的一项声明的值(在我调用它时从传递到我的 B2C 策略的 idToken)添加到我的 ContentDefintion 的 LoadUri 中。

这是我的技术资料:

<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>

和我的 ContentDefinition 注意:看看我如何硬编码 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>

原创:

我很为难。我一直在浏览 Whosebug 和互联网上的许多帖子。我希望你能帮助我。

我有一个自定义 B2C 策略,它基本上接受一个令牌,执行一些功能,然后 returns 最后一个访问令牌。那很好用。我的问题是我需要定义一个步骤,该步骤将根据先决条件触发技术配置文件。前提条件实际上适用于.

我缺少的是一种构建 technicalprofile/contentdefinition 以在另一个项目中加载我自己的错误页面(.Net Core 3 控制器)但完全可以访问的方法(Controllers/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 部分!我需要向这个自定义错误页面传递一个值。在这种情况下是一个向导。

如果我将 TP 用于无效link,那么这有效。我尝试了各种自定义内容定义,类似于:

      <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>

...signingerror 是我要访问的自定义错误页面。 如果我 运行 这样做,该策略将完全跳过该步骤。如果我使用无效的 link TP,那么它就可以工作。我也试图弄清楚如何将值传递给错误页面。伙计们,我很茫然。

如能提供任何帮助,我们将不胜感激。

您可以在 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