我有 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"]
是的,这可以使用
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>