使用自定义策略从 JSON 中提取布尔元素
Extract boolean element from JSON with custom policy
我想问一下是否有办法从来自 REST API 的 JSON 响应中提取布尔元素。
我的声明包含 JSON:
{
"customerEntity": {
"role": {
"id": 1
}
},
"settings": {
"isAdmin": false,
"isBlocked": false
}
}
我已经尝试了以下 ClaimsTransformations:GetClaimFromJson, GetSingleItemFromJson 但是它 returns 在上传到 Identity Experience Framework 期间出错,因为预期提取的声明是一个字符串。
非常感谢您的帮助。
最简单的解决方案是将响应映射到 REST API 技术配置文件中的声明。
我将添加一个用于测试的简单示例
技术简介
<TechnicalProfile Id="TestEchoJson">
<DisplayName>Test Echo</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">{Settings:TestApiUrl}</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="ResolveJsonPathsInJsonTokens">true</Item>
<Item Key="SendClaimsIn">QueryString</Item>
</Metadata>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="isAdmin" PartnerClaimType="settings.isAdmin" />
<OutputClaim ClaimTypeReferenceId="customProperty" PartnerClaimType="settings.customProperty" />
</OutputClaims>
</TechnicalProfile>
声明架构
<ClaimType Id="customProperty">
<DisplayName>customProperty</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="isAdmin">
<DisplayName>isAdmin</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
Mock Api 用于测试
app.get('/echo', async (req, res) => {
let jsonResponse = {
"customerEntity": {
"role": {
"id": 1
}
},
"settings": {
"isAdmin": false,
"isBlocked": false,
"customProperty": "Hello there"
},
};
res.json(jsonResponse);
});
我想问一下是否有办法从来自 REST API 的 JSON 响应中提取布尔元素。
我的声明包含 JSON:
{
"customerEntity": {
"role": {
"id": 1
}
},
"settings": {
"isAdmin": false,
"isBlocked": false
}
}
我已经尝试了以下 ClaimsTransformations:GetClaimFromJson, GetSingleItemFromJson 但是它 returns 在上传到 Identity Experience Framework 期间出错,因为预期提取的声明是一个字符串。
非常感谢您的帮助。
最简单的解决方案是将响应映射到 REST API 技术配置文件中的声明。
我将添加一个用于测试的简单示例
技术简介
<TechnicalProfile Id="TestEchoJson">
<DisplayName>Test Echo</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">{Settings:TestApiUrl}</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="ResolveJsonPathsInJsonTokens">true</Item>
<Item Key="SendClaimsIn">QueryString</Item>
</Metadata>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="isAdmin" PartnerClaimType="settings.isAdmin" />
<OutputClaim ClaimTypeReferenceId="customProperty" PartnerClaimType="settings.customProperty" />
</OutputClaims>
</TechnicalProfile>
声明架构
<ClaimType Id="customProperty">
<DisplayName>customProperty</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="isAdmin">
<DisplayName>isAdmin</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
Mock Api 用于测试
app.get('/echo', async (req, res) => {
let jsonResponse = {
"customerEntity": {
"role": {
"id": 1
}
},
"settings": {
"isAdmin": false,
"isBlocked": false,
"customProperty": "Hello there"
},
};
res.json(jsonResponse);
});