本文提供了在 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
- 输出声明: