Я пытаюсь извлечь один адрес электронной почты из массива адресов электронной почты (хранящихся в атрибуте otherEmails). Я подумал, что могу использовать преобразование утверждений GetSingleValueFromJsonArray. Но я получаю следующую ошибку:
The InputClaims mismatched in ClaimsTransformation with id "GetEmailFromJson" with TransformationMethod "GetSingleValueFromJsonArray". The following InputClaims were declared in the Policy but were not expected by the TransformMethod: [StringCollection]inputJsonClaim. The following InputClaims were expected by the TransformMethod but were not declared in the Policy: [String]inputJsonClaim.
Он жалуется, что мой ввод представляет собой набор строк, которым он и является. Ошибка говорит, что она хочет "строку" в качестве ввода. В документации также указано, что требуется строка. Но потом я не понимаю, как это должно работать с массивом, как следует из названия.
По сути, я просто хочу вернуть адрес электронной почты в id_token при использовании OpenID Connect. Но с B2C кажется, что я не могу установить поле почты, и когда я запрашиваю его, оно равно нулю. Итак, я начал использовать поле otherEmails. Но я действительно планирую хранить в нем только одно электронное письмо. Таким образом, я хочу вернуть утверждение электронной почты как утверждение с одним значением, а не массив.
Немного покопавшись, я понял, что могу достичь своей цели без использования ClaimsTransformation. Я могу просто сопоставить «signInNames.emailAddress» с «электронной почтой».
<OutputClaim ClaimTypeReferenceId = "signInNames.emailAddress" PartnerClaimType = "email"/>


Вы можете использовать преобразование утверждений GetSingleItemFromStringCollection для получения первого элемента в коллекции строк.
Ах, конечно. У меня нет JSON. У меня уже есть объект массива. И пример того поля, которое я хочу использовать. Спасибо!