Azure AD B2C中的自定义策略中的Rest API调用

问题描述

我是新来的,并试图通过调用REST API对旧版的访问来建立自定义登录策略。

API需要以下参数作为输入: client_id =固定值,client_secret =固定值,grant_type =固定值,范围=固定值,用户名=变量,密码=变量

以上参数不适用于Azure值,而是一些需要在请求中发送的固定值。

我在扩展程序自定义策略中添加了很少的部分,但似乎请求主体的格式不正确,并且出现错误。声明交换通过步骤“ 1”中指定的“通过旧版迁移用户迁移”返回了HTTP错误响应以及代码错误请求,原因为“错误请求”。 我在这里做错了什么?请帮忙。

添加了我的部分:

  <BuildingBlocks>
<ClaimsSchema>
  <ClaimType Id="RequestBody">
    <displayName>Request body</displayName>
    <DataType>string</DataType>
    <UserHelpText>RequestBody</UserHelpText>
  </ClaimType>
</ClaimsSchema>
<ClaimsTransformations>
    <ClaimsTransformation Id="GenerateRequestBody" TransformationMethod="GenerateJson">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="username" />
      <InputClaim ClaimTypeReferenceId="password" TransformationClaimType="password" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="client_id" DataType="string" Value="client" />
      <InputParameter Id="client_secret" DataType="string" Value="sec" />
      <InputParameter Id="grant_type" DataType="string" Value="grant" />
      <InputParameter Id="scope" DataType="string" Value="scope" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="RequestBody" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>
<ClaimsProviders>
  <ClaimsProvider>
  <displayName>REST API to communicate with Legacy IdP</displayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="UserMigrationViaLegacyIdp">
      <displayName>REST API call to communicate with Legacy IdP</displayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider,Web.TPEngine,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://</Item>
        <Item Key="AuthenticationType">None</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AllowInsecureAuthInProduction">true</Item>
        <Item Key="ClaimUsedForRequestPayload">RequestBody</Item>
      </Metadata>
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="GenerateRequestBody" />
      </InputClaimsTransformations>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="RequestBody" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="tokenSuccess" DefaultValue="false" />
        <OutputClaim ClaimTypeReferenceId="migrationrequired" />
      </OutputClaims>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

解决方法

您可以共享由声明转换创建的实际JSON吗?格式是否正确?在REST API技术配置文件中将 <InputClaimsTransformation ReferenceId="GenerateRequestBody" />的输出实际用作输入声明之前,可以使故障排除变得容易。这将揭示JSON格式的情况。

为此,首先创建一个自我声明的技术档案,然后将 <InputClaimsTransformation ReferenceId="GenerateRequestBody" />添加为输出声明转换。您的输出声明应该是您将在旅程的下一步中稍后使用的声明。

在用户旅程中,添加一个步骤,以调用自定义技术资料。使用App Insights添加下一步,将输出声明写入App Insights(https://docs.microsoft.com/en-us/azure/active-directory-b2c/analytics-with-application-insights

这将记录REST API正在接收的声明值。