【问题标题】:Set value of input claim based on other input claim that uses claimresolvers in Azure B2C Custom policies根据在 Azure B2C 自定义策略中使用声明解析器的其他输入声明设置输入声明的值
【发布时间】:2020-07-23 10:06:59
【问题描述】:

我有以下两个输入声明

<InputClaim ClaimTypeReferenceId="isAccessFlow" DefaultValue="{OAUTH-KV:access_flow}" AlwaysUseDefaultValue="true"/>
<InputClaim ClaimTypeReferenceId="prompt"  DefaultValue="select_account"/>

仅当 isAccessFlow 值不为真时,我想将 'prompt' 输入声明的值分配为 'select_account'。 在这种情况下,我无法弄清楚如何编写输入声明转换以实现预期要求。

【问题讨论】:

    标签: azure azure-ad-b2c


    【解决方案1】:

    声明类型

     <ClaimType Id="isAccessFlow">
        <DisplayName>Access Flow</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="prompt">
        <DisplayName>prompt</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
    

    技术简介

    <TechnicalProfile Id="ParseAccessFlow">
        <DisplayName>Access Flow</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider,Web.TPEngine, Version=1.0.0.0,
         Culture=neutral, PublicKeyToken=null" />
        <Metadata>
        <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
        </Metadata>
        <InputClaims>
        <InputClaim ClaimTypeReferenceId="isAccessFlow" DefaultValue="{OAUTH-KV:data_flow}" AlwaysUseDefaultValue="true"/>
        </InputClaims>
        <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="isAccessFlow" />
        </OutputClaims>
        <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="AssignedAccessFlowValue" />
        <OutputClaimsTransformation ReferenceId="ChangeToLower" />
        </OutputClaimsTransformations>
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
        </TechnicalProfile>
        <TechnicalProfile Id="PromptFlow">
          <DisplayName>Prompt</DisplayName>
          <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider,Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <InputClaimsTransformations>
          <InputClaimsTransformation ReferenceId="AssignedDefaultValue" />          
          </InputClaimsTransformations>
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="prompt"  />
          </InputClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="prompt"/>
          </OutputClaims>
        </TechnicalProfile>
    

    ClaimsTransformations

    <ClaimsTransformation Id="AssignedAccessFlowValue" TransformationMethod="FormatStringClaim">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="isAccessFlow" TransformationClaimType="inputClaim" />
        </InputClaims>
        <InputParameters>
          <InputParameter Id="stringFormat" DataType="string" Value="{0}" />
        </InputParameters>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="isAccessFlow" TransformationClaimType="outputClaim" />
        </OutputClaims>
      </ClaimsTransformation>
      <ClaimsTransformation Id="ChangeToLower" TransformationMethod="ChangeCase">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="isAccessFlow" TransformationClaimType="inputClaim1" />
        </InputClaims>
        <InputParameters>
          <InputParameter Id="toCase" DataType="string" Value="LOWER" />
        </InputParameters>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="isAccessFlow" TransformationClaimType="outputClaim" />
        </OutputClaims>
      </ClaimsTransformation>      
      <ClaimsTransformation Id="AssignedDefaultValue" TransformationMethod="CreateStringClaim">
        <InputParameters>
          <InputParameter Id="value" DataType="string" Value="select_account" />
        </InputParameters>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="prompt" TransformationClaimType="createdClaim" />
        </OutputClaims>
      </ClaimsTransformation>
    

    用户旅程

    <UserJourney Id="PromptCheck">
      <OrchestrationSteps>
        <OrchestrationStep Order="1" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="AccessFlow" TechnicalProfileReferenceId="ParseAccessFlow" />
          </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="2" Type="ClaimsExchange">
        <Preconditions>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
              <Value>isAccessFlow</Value>
              <Value>true</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <ClaimsExchanges>
            <ClaimsExchange Id="Assigned" TechnicalProfileReferenceId="PromptFlow" />
          </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
      </OrchestrationSteps>
      <ClientDefinition ReferenceId="DefaultWeb" />
    </UserJourney>
    

    【讨论】:

    • 感谢您的详细回答。我通过将提示值从前端本身作为自定义属性传递并按以下方式访问它,以另一种方式解决了我的问题&lt;InputClaim ClaimTypeReferenceId="prompt" PartnerClaimType="prompt" DefaultValue="{OAUTH-KV:account_prompt}" AlwaysUseDefaultValue="true"/&gt;
    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2021-01-12
    相关资源
    最近更新 更多