本文提供了在 Azure Active Directory B2C (Azure AD B2C) 中使用标识体验框架架构的 JSON 声明转换的示例。 有关详细信息,请参阅 声明转换

CreateJsonArray

从声明值创建 JSON 单元素数组。 查看此声明转换的 实时演示

TransformationClaimType

CreateJsonArray 示例

下面的示例创建一个 JSON 单数组。

<ClaimsTransformation Id="createlJsonPayload" TransformationMethod="CreateJsonArray">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="result" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 输入声明:
    • inputClaim: someone@example.com
    • 输出声明:
      • outputClaim: ["someone@contoso.com"]
      • GenerateJson

        使用声明值或常量生成 JSON 字符串。 点表示法后面的路径字符串用于指示将数据插入 JSON 字符串的位置。 按点拆分后,任何整数都解释为 JSON 数组的索引,而非整数则解释为 JSON 对象的索引。

        查看此声明转换的实时演示

        TransformationClaimType

        JSON 数组

        若要将 JSON 对象添加到 JSON 数组,请使用数组名称的格式和数组中的索引。 该数组从零开始。 从零开始到 N,无需跳过任何数字。 数组中的项可以包含任何对象。 例如,第一项包含两个对象:app 和 appId。 第二项只包含一个对象,即 program。 第三项包含四个对象:color、language、logo 和 background。

        以下示例演示如何配置 JSON 数组。 电子邮件数组使用具有动态值的 InputClaims。 值数组使用具有静态值的 InputParameters

        <ClaimsTransformation Id="GenerateJsonPayload" TransformationMethod="GenerateJson">
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="mailToName1" TransformationClaimType="emails.0.name" />
            <InputClaim ClaimTypeReferenceId="mailToAddress1" TransformationClaimType="emails.0.address" />
            <InputClaim ClaimTypeReferenceId="mailToName2" TransformationClaimType="emails.1.name" />
            <InputClaim ClaimTypeReferenceId="mailToAddress2" TransformationClaimType="emails.1.address" />
          </InputClaims>
          <InputParameters>
            <InputParameter Id="values.0.app" DataType="string" Value="Mobile app" />
            <InputParameter Id="values.0.appId" DataType="string" Value="123" />
            <InputParameter Id="values.1.program" DataType="string" Value="Holidays" />
            <InputParameter Id="values.2.color" DataType="string" Value="Yellow" />
            <InputParameter Id="values.2.language" DataType="string" Value="Spanish" />
            <InputParameter Id="values.2.logo" DataType="string" Value="contoso.png" />
            <InputParameter Id="values.2.background" DataType="string" Value="White" />
          </InputParameters>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="result" TransformationClaimType="outputClaim" />
          </OutputClaims>
        </ClaimsTransformation>
        

        此声明转换的结果如下:

        "values": [ "app": "Mobile app", "appId": "123" "program": "Holidays" "color": "Yellow", "language": "Spanish", "logo": "contoso.png", "background": "White" "emails": [ "name": "Joni", "address": "joni@contoso.com" "name": "Emily", "address": "emily@contoso.com"

        若要在输入声明和输入参数中指定 JSON 数组,必须在 InputClaims 元素中启动数组(从零到 N )。然后,在 InputParameters 元素中从最后一个索引继续索引。

        以下示例演示了在输入声明和输入参数中定义的数组。 值数组 values.0 的第一项在输入声明中定义。 输入参数从索引 1 values.1 继续到两个索引 values.2

        <ClaimsTransformation Id="GenerateJsonPayload" TransformationMethod="GenerateJson">
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="app" TransformationClaimType="values.0.app" />
            <InputClaim ClaimTypeReferenceId="appId" TransformationClaimType="values.0.appId"  />
          </InputClaims>
          <InputParameters>
            <InputParameter Id="values.1.program" DataType="string" Value="Holidays" />
            <InputParameter Id="values.2.color" DataType="string" Value="Yellow" />
            <InputParameter Id="values.2.language" DataType="string" Value="Spanish" />
            <InputParameter Id="values.2.logo" DataType="string" Value="contoso.png" />
            <InputParameter Id="values.2.background" DataType="string" Value="White" />
          </InputParameters>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="result" TransformationClaimType="outputClaim" />
          </OutputClaims>
        </ClaimsTransformation>
        

        GenerateJson 示例

        以下示例基于“email”和“OTP”的声明值以及常量字符串生成 JSON 字符串。

        <ClaimsTransformation Id="GenerateRequestBody" TransformationMethod="GenerateJson">
          <InputClaims>
            <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.to.0.email" />
            <InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="personalizations.0.dynamic_template_data.otp" />
            <InputClaim ClaimTypeReferenceId="copiedEmail" TransformationClaimType="personalizations.0.dynamic_template_data.verify-email" />
          </InputClaims>
          <InputParameters>
            <InputParameter Id="template_id" DataType="string" Value="d-4c56ffb40fa648b1aa6822283df94f60"/>
            <InputParameter Id="from.email" DataType="string" Value="service@contoso.com"/>
            <InputParameter Id="personalizations.0.subject" DataType="string" Value="Contoso account email verification code"/>
          </InputParameters>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="requestBody" TransformationClaimType="outputClaim"/>
          </OutputClaims>
        </ClaimsTransformation>
        

        以下声明转换输出一个 JSON 字符串声明,该声明将作为发送到 SendGrid (第三方电子邮件提供程序)的请求正文。 JSON 对象的结构由 InputClaims 的 InputParameters 和 TransformationClaimTypes 的点表示法中的 ID 定义。 点表示法中的数字表示数组。 值来自 InputClaims 的值和 InputParameters 的“Value”属性。

      • 输入声明:
        • 电子邮件,转换声明类型 personalizations.0.to.0.email:“someone@example.com”
        • copiedEmail,转换声明类型 personalizations.0.dynamic_template_data.verify-email:“someone@example.com”
        • otp, 转换声明类型 personalizations.0.dynamic_template_data.otp "346349"
        • 输入参数:
          • template_id: "d-4c56ffb40fa648b1aa6822283df94f60"
          • from.email: "service@contoso.com"
          • personalizations.0.subject "Contoso 帐户电子邮件验证码"
          • 输出声明:
            • outputClaim

              "personalizations": [ "to": [ "email": "someone@example.com" "dynamic_template_data": { "otp": "346349", "verify-email" : "someone@example.com" "subject": "Contoso account email verification code" "template_id": "d-989077fbba9746e89f3f6411f596fb96", "from": { "email": "service@contoso.com"

              GenerateJson 的另一个示例

              以下示例基于声明值和常量字符串生成 JSON 字符串。

              <ClaimsTransformation Id="GenerateRequestBody" TransformationMethod="GenerateJson">
                <InputClaims>
                  <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="customerEntity.email" />
                  <InputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="customerEntity.userObjectId" />
                  <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="customerEntity.firstName" />
                  <InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="customerEntity.lastName" />
                </InputClaims>
                <InputParameters>
                  <InputParameter Id="customerEntity.role.name" DataType="string" Value="Administrator"/>
                  <InputParameter Id="customerEntity.role.id" DataType="long" Value="1"/>
                </InputParameters>
                <OutputClaims>
                  <OutputClaim ClaimTypeReferenceId="requestBody" TransformationClaimType="outputClaim"/>
                </OutputClaims>
              </ClaimsTransformation>
              

              以下声明转换输出一个 JSON 字符串声明,该声明将作为发送到 REST API 的请求的正文。 JSON 对象的结构由 InputClaims 的 InputParameters 和 TransformationClaimTypes 的点表示法中的 ID 定义。 值来自 InputClaims 的值和 InputParameters 的“Value”属性。

            • 输入声明:
              • 电子邮件,转换声明类型 customerEntity.email:“john.s@contoso.com”
              • objectId, transformation claim type customerEntity.userObjectId "01234567-89ab-cdef-0123-456789abcdef"
              • givenName, transformation claim type customerEntity.firstName "John"
              • surname, transformation claim type customerEntity.lastName "Smith"
              • 输入参数:
                • customerEntity.role.name:“Administrator”
                • customerEntity.role.id 1
                • 输出声明:
                  • requestBody:

                    "customerEntity":{ "email":"john.s@contoso.com", "userObjectId":"01234567-89ab-cdef-0123-456789abcdef", "firstName":"John", "lastName":"Smith", "role":{ "name":"Administrator", "id": 1

                    GenerateJson 声明转换接受纯字符串。 如果输入声明包含 JSON 字符串,则会对该字符串进行转义。 在以下示例中,如果使用上述 CreateJsonArray 中的电子邮件输出(即 [“someone@contoso.com”])作为输入参数,则电子邮件将如以下 JSON 声明所示:

                  • 输出声明:
                    • requestBody:

                      "customerEntity":{ "email":"[\"someone@contoso.com\"]", "userObjectId":"01234567-89ab-cdef-0123-456789abcdef", "firstName":"John", "lastName":"Smith", "role":{ "name":"Administrator", "id": 1

                      GetClaimFromJson 示例

                      在以下示例中,声明转换提取 JSON 数据中的 emailAddress 元素:{"emailAddress": "someone@example.com", "displayName": "Someone"}

                      <ClaimsTransformation Id="GetEmailClaimFromJson" TransformationMethod="GetClaimFromJson">
                        <InputClaims>
                          <InputClaim ClaimTypeReferenceId="customUserData" TransformationClaimType="inputJson" />
                        </InputClaims>
                        <InputParameters>
                          <InputParameter Id="claimToExtract" DataType="string" Value="emailAddress" />
                        </InputParameters>
                        <OutputClaims>
                          <OutputClaim ClaimTypeReferenceId="extractedEmail" TransformationClaimType="extractedClaim" />
                        </OutputClaims>
                      </ClaimsTransformation>
                      
                    • 输入声明:
                      • inputJson: {"emailAddress": "someone@example.com", "displayName":"Someone"}
                      • 输入参数:
                        • claimToExtract: emailAddress
                        • 输出声明:
                          • extractedClaim: someone@example.com
                          • 另一个 GetClaimFromJson 示例

                            GetClaimFromJson 声明转换从 JSON 数据中获取单个元素。 在前面的示例中,该元素为 emailAddress。 若要获取 displayName,请创建另一个声明转换。 例如:

                            <ClaimsTransformation Id="GetDispalyNameClaimFromJson" TransformationMethod="GetClaimFromJson">
                              <InputClaims>
                                <InputClaim ClaimTypeReferenceId="customUserData" TransformationClaimType="inputJson" />
                              </InputClaims>
                              <InputParameters>
                                <InputParameter Id="claimToExtract" DataType="string" Value="displayName" />
                              </InputParameters>
                              <OutputClaims>
                                <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="extractedClaim" />
                              </OutputClaims>
                            </ClaimsTransformation>
                            
                          • 输入声明:
                            • inputJson: {"emailAddress": "someone@example.com", "displayName":"Someone"}
                            • 输入参数:
                              • claimToExtract:displayName
                              • 输出声明:
                                • extractedClaim:Someone
                                • GetClaimsFromJsonArray

                                  从 Json 数据中获取指定元素列表。 查看此声明转换的实时演示

                                  TransformationClaimType

                                  GetClaimsFromJsonArray 示例

                                  在以下示例中,声明转换从 JSON 数据中提取以下声明:email(字符串)、displayName(字符串)、membershipNum (int)、active(布尔值)和 birthDate(日期时间)。

                                  <ClaimsTransformation Id="GetClaimsFromJson" TransformationMethod="GetClaimsFromJsonArray">
                                    <InputClaims>
                                      <InputClaim ClaimTypeReferenceId="jsonSourceClaim" TransformationClaimType="jsonSource" />
                                    </InputClaims>
                                    <InputParameters>
                                      <InputParameter Id="errorOnMissingClaims" DataType="boolean" Value="false" />
                                      <InputParameter Id="includeEmptyClaims" DataType="boolean" Value="false" />
                                      <InputParameter Id="jsonSourceKeyName" DataType="string" Value="key" />
                                      <InputParameter Id="jsonSourceValueName" DataType="string" Value="value" />
                                    </InputParameters>
                                    <OutputClaims>
                                      <OutputClaim ClaimTypeReferenceId="email" />
                                      <OutputClaim ClaimTypeReferenceId="displayName" />
                                      <OutputClaim ClaimTypeReferenceId="membershipID" />
                                      <OutputClaim ClaimTypeReferenceId="active" />
                                      <OutputClaim ClaimTypeReferenceId="birthDate" />
                                    </OutputClaims>
                                  </ClaimsTransformation>
                                  
                                • 输入声明:

                                • jsonSourceClaim:

                                  "key": "email", "value": "someone@example.com" "key": "displayName", "value": "Someone" "key": "membershipID", "value": 6353399 "key": "active", "value": true "key": "birthDate", "value": "2005-09-23T00:00:00Z"

                                  GetClaimsFromJsonArrayV2 示例

                                  在以下示例中,声明转换从 JSON 数据中提取以下声明:email(字符串)、displayName(字符串)、membershipNum (int)、active(布尔值)和 birthDate(日期时间)。

                                  <ClaimsTransformation Id="GetClaimsFromJson" TransformationMethod="GetClaimsFromJsonArrayV2">
                                    <InputClaims>
                                      <InputClaim ClaimTypeReferenceId="jsonSourceClaim" TransformationClaimType="jsonSource" />
                                    </InputClaims>
                                    <InputParameters>
                                      <InputParameter Id="errorOnMissingClaims" DataType="boolean" Value="false" />
                                      <InputParameter Id="includeEmptyClaims" DataType="boolean" Value="false" />
                                      <InputParameter Id="jsonSourceKeyName" DataType="string" Value="key" />
                                      <InputParameter Id="jsonSourceValueName" DataType="string" Value="value" />
                                    </InputParameters>
                                    <OutputClaims>
                                      <OutputClaim ClaimTypeReferenceId="email" />
                                      <OutputClaim ClaimTypeReferenceId="displayName" />
                                      <OutputClaim ClaimTypeReferenceId="membershipID" />
                                      <OutputClaim ClaimTypeReferenceId="active" />
                                      <OutputClaim ClaimTypeReferenceId="birthDate" />
                                    </OutputClaims>
                                  </ClaimsTransformation>
                                  
                                • 输入声明:

                                • jsonSourceClaim[0](字符串集合第一个元素):

                                  "key": "email", "value": "someone@example.com"
                                • jsonSourceClaim[1](字符串集合第二个元素):

                                  "key": "displayName", "value": "Someone"
                                • jsonSourceClaim[2](字符串集合第三个元素):

                                  "key": "membershipID", "value": 6353399
                                • jsonSourceClaim[3](字符串集合第四个元素):

                                  "key": "active", "value": true
                                • jsonSourceClaim[4](字符串集合第五个元素):

                                  "key": "birthDate", "value": "2005-09-23T00:00:00Z"

                                  GetNumericClaimFromJson 示例

                                  在以下示例中,声明转换提取 JSON 数据中的 id 元素。

                                  <ClaimsTransformation Id="GetIdFromResponse" TransformationMethod="GetNumericClaimFromJson">
                                    <InputClaims>
                                      <InputClaim ClaimTypeReferenceId="exampleInputClaim" TransformationClaimType="inputJson" />
                                    </InputClaims>
                                    <InputParameters>
                                      <InputParameter Id="claimToExtract" DataType="string" Value="id" />
                                    </InputParameters>
                                    <OutputClaims>
                                      <OutputClaim ClaimTypeReferenceId="membershipId" TransformationClaimType="extractedClaim" />
                                    </OutputClaims>
                                  </ClaimsTransformation>
                                  
                                • 输入声明:

                                • inputJson:

                                  "emailAddress": "someone@example.com", "displayName": "Someone", "id": 6353399

                                  GetSingleItemFromJson 示例

                                  在下面的示例中,声明转换从 JSON 数据中提取第一个元素(名字)。

                                  <ClaimsTransformation Id="GetGivenNameFromResponse" TransformationMethod="GetSingleItemFromJson">
                                    <InputClaims>
                                      <InputClaim ClaimTypeReferenceId="json" TransformationClaimType="inputJson" />
                                    </InputClaims>
                                    <OutputClaims>
                                      <OutputClaim ClaimTypeReferenceId="givenNameKey" TransformationClaimType="key" />
                                      <OutputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="value" />
                                    </OutputClaims>
                                  </ClaimsTransformation>
                                  
                                • 输入声明:

                                • inputJson:

                                  "givenName": "Emily", "lastName": "Smith"

                                  GetSingleValueFromJsonArray 示例

                                  在以下示例中,声明转换提取 JSON 数组 ["someone@example.com", "Someone", 6353399] 中的第一个元素(电子邮件地址)。

                                  <ClaimsTransformation Id="GetEmailFromJson" TransformationMethod="GetSingleValueFromJsonArray">
                                    <InputClaims>
                                      <InputClaim ClaimTypeReferenceId="userData" TransformationClaimType="inputJsonClaim" />
                                    </InputClaims>
                                    <OutputClaims>
                                      <OutputClaim ClaimTypeReferenceId="email" TransformationClaimType="extractedClaim" />
                                    </OutputClaims>
                                  </ClaimsTransformation>
                                  
                                • 输入声明:
                                  • inputJsonClaim: ["someone@example.com", "Someone", 6353399]
                                  • 输出声明:
                                    • extractedClaim: someone@example.com
                                    • XmlStringToJsonString

                                      将 XML 数据转换为 JSON 格式。 查看此声明转换的实时演示

                                      TransformationClaimType
                                      <ClaimsTransformation Id="ConvertXmlToJson" TransformationMethod="XmlStringToJsonString">
                                        <InputClaims>
                                          <InputClaim ClaimTypeReferenceId="intpuXML" TransformationClaimType="xml" />
                                        </InputClaims>
                                        <OutputClaims>
                                          <OutputClaim ClaimTypeReferenceId="outputJson" TransformationClaimType="json" />
                                        </OutputClaims>
                                      </ClaimsTransformation>
                                      

                                      XmlStringToJsonString 示例

                                      在以下示例中,声明转换将以下 XML 数据转换为 JSON 格式。

                                      输入声明:

                                      <name>Someone</name> <email>someone@example.com</email> </user>

                                      输出声明:

                                      "user": { "name":"Someone", "email":"someone@example.com"
                                    • 在 Azure AD B2C 社区 GitHub 存储库中查看更多声明转换示例
  •