简体   繁体   English

根据在 Azure B2C 自定义策略中使用声明解析器的其他输入声明设置输入声明的值

[英]Set value of input claim based on other input claim that uses claimresolvers in Azure B2C Custom policies

I have the below two input claims我有以下两个输入声明

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

I want to assign the value for 'prompt' input claim as 'select_account' only when the isAccessFlow value is not true.仅当isAccessFlow值不为真时,我才想将“提示”输入声明的值分配为“select_account” I am unable to figure out how to write input claim transformations in this case to achieve the requirement.在这种情况下,我无法弄清楚如何编写输入声明转换来实现要求。

Claim Types索赔类型

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

Technical Profiles技术简介

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

User Journey用户旅程

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM