Azure B2C 自定义策略索赔转换 - 拆分集合

问题描述 投票:0回答:1

我有 Azure B2C 自定义策略。其中一项声明是从上游 OIDC 提供商获取的 StringCollection。

我的下游应用程序 (AWS Cognito) 对单个声明的长度有硬性限制。在我的应用程序中,StringCollection 声明(JSON 化)可能会超出该长度限制。

在自定义策略中,我想做一个 ClaimTransformation,将输入 StringCollection 声明拆分为一组输出 StringCollection 声明,每个输出 StringCollection 声明不超过 N 个元素。

我查看了 StringCollection 转换,但没有看到任何支持这一点的转换。不过,我想在放弃之前咨询一下社区,以防有某种我没有考虑的方法来实现这一目标(我是 Azure 的新手)。

示例:

我希望每个输出声明的项目限制为 2(仅用于示例目的)。

来自上游 OIDC 提供商的输入声明:

myclaim = ["val1", "val2", "val3", ..., "val6"]

B2C 期望的输出声明:

myclaim_0 = ["val1", "val2"]
myclaim_1 = ["val3", "val4"]
myclaim_2 = ["val5", "val6"]
azure azure-ad-b2c
1个回答
0
投票

是的,这可以使用

ParseJson
变换方法来完成,并使用
stringFormat
参数单独进行变换。

<Transformations>
    <Transformation Id="ParseInputCollection" TransformationMethod="ParseJson" myclaim" OutputClaimsReferenceId="parsedCollection" Persisted="True" />

    <Transformation Id="AssignOutputClaim0">
        <InputClaims>
            <InputClaim ClaimTypeReferenceId="parsedCollection" TransformationClaimType="parsedCollection" />
        </InputClaims>
        <InputParameters>
            <InputParameter Id="stringFormat" DataType="string" Value='["{0}","{1}"]' />
        </InputParameters>
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="myclaim_0" TransformationClaimType="myclaim_0" />
        </OutputClaims>
    </Transformation>

    <Transformation Id="AssignOutputClaim1">
        <InputClaims>
            <InputClaim ClaimTypeReferenceId="parsedCollection" TransformationClaimType="parsedCollection" />
        </InputClaims>
        <InputParameters>
            <InputParameter Id="stringFormat" DataType="string" Value='["{2}","{3}"]' />
        </InputParameters>
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="myclaim_1" TransformationClaimType="myclaim_1" />
        </OutputClaims>
    </Transformation>

    <Transformation Id="AssignOutputClaim2">
        <InputClaims>
            <InputClaim ClaimTypeReferenceId="parsedCollection" TransformationClaimType="parsedCollection" />
        </InputClaims>
        <InputParameters>
            <InputParameter Id="stringFormat" DataType="string" Value='["{4}","{5}"]' />
        </InputParameters>
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="myclaim_2" TransformationClaimType="myclaim_2" />
        </OutputClaims>
    </Transformation>
</Transformations>

此示例假设您来自上游 OIDC 的声明称为

myclaim
,输出为
myclaim_0
myclaim_1
myclaim_2

现在您只需在

OutputClaimsTransformations
部分引用它们即可:

<UserJourneyBehaviors>
    <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="ParseInputCollection" />
        <OutputClaimsTransformation ReferenceId="AssignOutputClaim0" />
        <OutputClaimsTransformation ReferenceId="AssignOutputClaim1" />
        <OutputClaimsTransformation ReferenceId="AssignOutputClaim2" />
    </OutputClaimsTransformations>
</UserJourneyBehaviors>
© www.soinside.com 2019 - 2024. All rights reserved.