使用自定义策略从 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);
});