【问题标题】:Rest API call in custom policy in Azure AD B2CAzure AD B2C 中自定义策略中的 Rest API 调用
【发布时间】:2020-08-15 15:53:04
【问题描述】:

我是新手,并尝试通过调用对 legacy 的 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>

【问题讨论】:

  • 能否请您添加 REST API 技术配置文件(在固定值中使用虚拟值),这将有助于您回答配置文件中的问题。
  • 我添加了我的一段代码。如果我在请求正文中以正确的格式发送属性,请检查并告诉我。
  • 您是否在 OrchestrationStep 中调用 REST API,如果是,请通过删除密码输入尝试一次并尝试,否则您可以从您所在的自断言技术配置文件的验证技术配置文件中调用 REST API正在获取电子邮件和密码。

标签: azure azure-ad-b2c identity-experience-framework


【解决方案1】:

您能分享声明转换创建的实际 JSON 吗?格式是否正确?您可以通过在实际将其用作 REST API 技术配置文件中的输入声明之前显示 &lt;InputClaimsTransformation ReferenceId="GenerateRequestBody" /&gt; 的输出来简化故障排除。这将揭示您的 JSON 格式发生了什么。

为此,首先创建一个自我断言的技术配置文件并将 &lt;InputClaimsTransformation ReferenceId="GenerateRequestBody" /&gt; 添加为输出声明转换。您的输出声明应该是您稍后将在旅程的下一步中使用的声明。

在用户旅程中,添加一个调用自我断言技术配置文件的步骤。使用 App Insights 添加下一步以将输出声明写入 App Insights(https://docs.microsoft.com/en-us/azure/active-directory-b2c/analytics-with-application-insights)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多