azure - 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"/>
解决方案
您可以使用GetSingleItemFromStringCollection声明转换来获取字符串集合中的第一项。
推荐阅读
- java - 如何重新分配一维数组中的值?
- docker - Docker-Compose + 命令
- macos - OpenGL 无法在 macOS Mojave 上渲染
- r - 带有R(tm包?)的PDF中句子中单词的共现
- python - 如何在 pandas.Series.str.replace() 中使用正则表达式
- azure - 分区与 RU
- php - 在服务器上安装 SSL 证书时,是否需要更改 PHP 表单提交和 MySQL intersterer 代码?
- netlogo - MOVE-TO 期望输入是代理,但得到 NOBODY
- java - 使用 PDFBox 从签名的 PDF 中读取原始文档
- .net - 用于多个分布式 .net 服务的单一集中配置设置存储