如何使用包含点 (.) 的 Json 键将 OutputClaims 映射到 Azure AD B2C 自定义策略

How to map OutputClaims with Json keys containing a dot (.) with Azure AD B2C Custom Policy

我需要开发一个能够通过 JSON 响应的 RESTful 技术配置文件,例如:

{
   "somekey.withadot": "Some value"
}

我的技术简介如下:

<TechnicalProfile Id="SomeId">
      <DisplayName>Some displayname</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="SendClaimsIn">Url</Item>
        <Item Key="ServiceUrl">https://someurl.com</Item>
        <Item Key="AuthenticationType">Bearer</Item>
        <Item Key="UseClaimAsBearerToken">identityProviderAccessToken</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="identityProviderAccessToken" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="somekey" PartnerClaimType="somekey.withadot"/>
      </OutputClaims>
    </TechnicalProfile>

但是,Azure AD B2C 尝试将 JSON 解析为嵌套主体,因为它们 dot notation。有人想出解决办法吗?

ResolveJsonPathsInJsonTokens 元数据项设置为 false

https://docs.microsoft.com/en-us/azure/active-directory-b2c/restful-technical-profile#metadata

Key Required Description
ResolveJsonPathsInJsonTokens No Indicates whether the technical profile resolves JSON paths. Possible values: true, or false (default). Use this metadata to read data from a nested JSON element. In an OutputClaim, set the PartnerClaimType to the JSON path element you want to output. For example: firstName.localized, or data[0].to[0].email.

更新:我接触过Azure。一直在研究它的工程组的工程师做了一些额外的测试,结论是:如果 JSON 参数名称中包含一个点(例如:somekey.withadot),则无论是否使用 ResoveJsonPathsInJsonTokens,都无法通过声明。设置为 true 或 false。预期是 JSON 属性 名称不包含点。

团队不认为这是一个错误,因为 JSON 属性 预计不会包含点,但团队会将其作为功能提交并更新 public 关于 ResoveJsonPathsInJsonTokens 的文档。

更新:已添加为功能请求:https://feedback.azure.com/d365community/idea/23e6ae2b-4fdb-ec11-a81b-0022484ee92d