首页 > 解决方案 > Azure AD B2C:从 Json 数组中提取单个项目

问题描述

我正在尝试从一组电子邮件地址(存储在 otherEmails 属性中)中提取单个电子邮件地址。我以为我可以使用GetSingleValueFromJsonArray声明转​​换。但是,我收到以下错误:

InputClaims 在 ClaimsTransformation 中不匹配,ID 为“GetEmailFromJson”,TransformationMethod 为“GetSingleValueFromJsonArray”。策略中声明了以下 InputClaim,但 TransformMethod 不期望这些 InputClaim:[StringCollection]inputJsonClaim。TransformMethod 需要以下 InputClaim,但未在 Policy 中声明:[String]inputJsonClaim。

它抱怨我的输入是字符串的集合——它就是这样。该错误表示它需要一个“字符串”作为输入。该文档还声明它需要一个字符串。但是,顾名思义,我很困惑这应该如何与数组一起使用。

本质上,我只想在使用 OpenID Connect 时返回 id_token 中的电子邮件地址。但是对于 B2C,我似乎无法设置邮件字段,并且当我查询它时它为空。所以,我开始使用 otherEmails 字段。但我真的只打算在其中存储一封电子邮件。因此,我想将电子邮件声明作为单值声明返回,而不是数组。

更新

经过更多的挖掘,我意识到我可以在不使用 ClaimsTransformation 的情况下实现我的目标。我可以将“signInNames.emailAddress”映射到“email”。

<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email"/>

标签: azuretransformationazure-ad-b2c

解决方案


您可以使用GetSingleItemFromStringCollection声明转换来获取字符串集合中的第一项。


推荐阅读