首页 > 解决方案 > 从自定义策略调用 Rest Api

问题描述

我在从自定义策略调用休息 api 时遇到问题。我需要将数据发送到其余 api 中,如下所示

{
  "correlationId": "123456",
  "message": {
    "email": "test@somedomain.com"
  }
}

我有以下声明转换

<ClaimsTransformation Id="GenerateGetAadRequestBody" TransformationMethod="GenerateJson">

    <InputClaims>
      <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="message.emailAddress" />
      <InputClaim ClaimTypeReferenceId="correlationId" TransformationClaimType="correlationId" />
    </InputClaims>

    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="getAadRequestBody" TransformationClaimType="outputClaim"/>
    </OutputClaims>

</ClaimsTransformation>

我正在使用以下 Claims Provider 进行 Rest Api 调用

<ClaimsProvider>
  <DisplayName>Custom REST API</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="RestApiGetAad">
      <DisplayName>Call the Rest API</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:RestApiGetAadUrl}</Item>
        <Item Key="AuthenticationType">Basic</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="ClaimUsedForRequestPayload">getAadRequestBody</Item>
        <Item Key="ResolveJsonPathsInJsonTokens">true</Item>
        <Item Key="DebugMode">{Settings:RestDebugMode}</Item>
        <Item Key="DefaultUserMessageIfRequestFailed">Cannot process your request right now, please try again later.</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="{Settings:RestApiUserName}" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="{Settings:RestApiPassword}" />
      </CryptographicKeys>

      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="GenerateGetAadRequestBody" />
      </InputClaimsTransformations>

      <InputClaims>
        <InputClaim ClaimTypeReferenceId="getAadRequestBody" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="useAAD" PartnerClaimType="content.UseAad" Required="true" />
      </OutputClaims>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

看起来正在拨打电话,但是,身体中没有发送任何内容。知道我做错了什么吗?

标签: azure-ad-b2c

解决方案


不幸的是,这发出了错误的错误代码。应该是PEBCAK,因为我没有尝试在 ClaimsTransformation 中使用的声明。认为这里的帖子给了我一些Rubber Duck Debugging的信息,我再次走流程发现了问题


推荐阅读