You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure AD B2C自定义策略中读取state参数并传递给REST API

如何在Azure AD B2C自定义策略中读取state参数并传递给REST API

没问题,这个需求在Azure AD B2C自定义策略里完全可以实现,我来给你一步步拆解操作步骤:

1. 先在自定义策略中声明state作为ClaimType

首先,你需要在策略的<ClaimsSchema>节点下添加一个state声明类型,用来存储客户端传递的state参数值:

<ClaimsSchema>
  <ClaimType Id="state">
    <DisplayName>State Parameter</DisplayName>
    <DataType>string</DataType>
    <UserHelpText>State parameter passed from client</UserHelpText>
  </ClaimType>
</ClaimsSchema>

2. 从授权码流中捕获state参数

接下来,找到你用来配置授权码流的<TechnicalProfile>(通常是基于OAuth2协议的技术配置,比如OIDC-OpenIdConnect这类),在它的<OutputClaims>节点里添加state声明,这样B2C就会把客户端发送的state参数捕获到这个声明中:

<TechnicalProfile Id="OIDC-OpenIdConnect">
  <DisplayName>My IDP</DisplayName>
  <Protocol Name="OpenIdConnect" />
  <!-- 其他配置项... -->
  <OutputClaims>
    <!-- 已有的输出声明... -->
    <OutputClaim ClaimTypeReferenceId="state" PartnerClaimType="state" />
  </OutputClaims>
  <!-- 其他配置项... -->
</TechnicalProfile>

这里的PartnerClaimType="state"是告诉B2C从授权请求的响应里读取state字段的值,映射到我们定义的state声明上。

3. 将state参数作为输入传递给REST API

最后,找到你用来调用REST API的<TechnicalProfile>(通常是基于Restful协议的技术配置),在它的<InputClaims>节点里添加state声明,这样这个参数就会被作为请求参数传递给你的REST API:

<TechnicalProfile Id="REST-GetExtendedClaims">
  <DisplayName>Get Extended User Claims</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://your-api-url/endpoint</Item>
    <Item Key="AuthenticationType">None</Item> <!-- 根据你的API认证方式调整 -->
    <Item Key="SendClaimsIn">Body</Item> <!-- 可以是Body/QueryString,根据API接收方式选择 -->
  </Metadata>
  <InputClaims>
    <!-- 已有的输入声明... -->
    <InputClaim ClaimTypeReferenceId="state" />
  </InputClaims>
  <!-- 其他配置项(比如OutputClaims、UseTechnicalProfileForSessionManagement等)... -->
</TechnicalProfile>

同时要注意,调用REST API的编排步骤(<OrchestrationStep>)必须放在授权码流技术配置的步骤之后,确保state声明已经被成功捕获。

额外注意事项

  • 如果客户端传递的state是经过编码的(比如Base64),你可以在自定义策略中添加一个ClaimsTransformation来解码它,再传递给API。
  • 要确保state声明在整个流程中是可访问的,比如在编排步骤的<Claims>节点里包含它,或者通过OutputClaims传递到后续步骤。

内容的提问来源于stack exchange,提问作者Sampath Dilhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:02:56