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

Azure B2C自定义策略:如何在登录/注册流程中重写重定向URL

在Azure B2C自定义策略中根据用户类型重定向至不同站点

可以直接在自定义策略XML中实现按用户类型动态重定向,完全无需JS或额外端点,具体实现步骤如下:

1. 定义用户类型声明

先在策略的<ClaimsSchema>中添加存储用户类型的声明,用于后续分支判断:

<ClaimsSchema>
  <ClaimType Id="userType">
    <DisplayName>用户类型</DisplayName>
    <DataType>string</DataType>
    <UserHelpText>区分用户类型(如Admin、Customer)</UserHelpText>
  </ClaimType>
</ClaimsSchema>

2. 确保获取用户类型声明

在登录/注册流程的TechnicalProfile中,加入读取用户类型的配置,比如从Azure AD B2C的用户属性中获取:

<OutputClaim ClaimTypeReferenceId="userType" />

如果是注册流程,可添加用户选择控件让用户指定类型,确保该声明被正确赋值。

3. 添加重定向URL转换规则

在<ClaimsTransformations>中定义不同用户类型对应的重定向URL:

<ClaimsTransformations>
  <!-- 管理员用户重定向规则 -->
  <ClaimsTransformation Id="SetAdminRedirectUri" TransformationMethod="CreateStringClaim">
    <InputParameters>
      <InputParameter Id="value" DataType="string" Value="https://admin.yourdomain.com" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="redirectUri" TransformationClaimType="createdClaim" />
    </OutputClaims>
  </ClaimsTransformation>

  <!-- 普通用户重定向规则 -->
  <ClaimsTransformation Id="SetCustomerRedirectUri" TransformationMethod="CreateStringClaim">
    <InputParameters>
      <InputParameter Id="value" DataType="string" Value="https://customer.yourdomain.com" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="redirectUri" TransformationClaimType="createdClaim" />
    </OutputClaims>
  </ClaimsTransformation>

  <!-- 默认重定向规则(兜底) -->
  <ClaimsTransformation Id="SetDefaultRedirectUri" TransformationMethod="CreateStringClaim">
    <InputParameters>
      <InputParameter Id="value" DataType="string" Value="https://default.yourdomain.com" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="redirectUri" TransformationClaimType="createdClaim" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>

4. 创建转换规则对应的TechnicalProfile

为每个重定向规则创建专用的TechnicalProfile,用于触发转换逻辑:

<TechnicalProfiles>
  <TechnicalProfile Id="SetAdminRedirectUriProfile">
    <DisplayName>设置管理员重定向地址</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="redirectUri" />
    </OutputClaims>
    <ClaimsTransformations>
      <ClaimsTransformationReference Id="SetAdminRedirectUri" />
    </ClaimsTransformations>
  </TechnicalProfile>

  <TechnicalProfile Id="SetCustomerRedirectUriProfile">
    <DisplayName>设置普通用户重定向地址</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="redirectUri" />
    </OutputClaims>
    <ClaimsTransformations>
      <ClaimsTransformationReference Id="SetCustomerRedirectUri" />
    </ClaimsTransformations>
  </TechnicalProfile>

  <TechnicalProfile Id="SetDefaultRedirectUriProfile">
    <DisplayName>设置默认重定向地址</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="redirectUri" />
    </OutputClaims>
    <ClaimsTransformations>
      <ClaimsTransformationReference Id="SetDefaultRedirectUri" />
    </ClaimsTransformations>
  </TechnicalProfile>
</TechnicalProfiles>

5. 在用户旅程中添加条件分支

在登录/注册流程的编排步骤末尾,添加条件分支,根据userType的值触发对应的重定向规则:

<UserJourneys>
  <UserJourney Id="SignUpOrSignIn">
    <OrchestrationSteps>
      <!-- 省略前面的登录/注册认证步骤 -->

      <!-- 第一步:触发默认重定向(匹配不到用户类型时执行) -->
      <OrchestrationStep Order="8" Type="ClaimsExchange">
        <Preconditions>
          <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
            <Value>userType</Value>
            <Value>Admin</Value>
            <Action>SkipThisOrchestrationStep</Action>
          </Precondition>
          <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
            <Value>userType</Value>
            <Value>Customer</Value>
            <Action>SkipThisOrchestrationStep</Action>
          </Precondition>
        </Preconditions>
        <ClaimsExchanges>
          <ClaimsExchange Id="SetDefaultRedirect" TechnicalProfileReferenceId="SetDefaultRedirectUriProfile" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- 第二步:管理员用户专属重定向 -->
      <OrchestrationStep Order="9" Type="ClaimsExchange">
        <Preconditions>
          <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
            <Value>userType</Value>
            <Value>Admin</Value>
            <Action>SkipThisOrchestrationStep</Action>
          </Precondition>
        </Preconditions>
        <ClaimsExchanges>
          <ClaimsExchange Id="SetAdminRedirect" TechnicalProfileReferenceId="SetAdminRedirectUriProfile" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- 第三步:普通用户专属重定向 -->
      <OrchestrationStep Order="10" Type="ClaimsExchange">
        <Preconditions>
          <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
            <Value>userType</Value>
            <Value>Customer</Value>
            <Action>SkipThisOrchestrationStep</Action>
          </Precondition>
        </Preconditions>
        <ClaimsExchanges>
          <ClaimsExchange Id="SetCustomerRedirect" TechnicalProfileReferenceId="SetCustomerRedirectUriProfile" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- 最后一步:使用修改后的redirectUri完成重定向 -->
      <OrchestrationStep Order="11" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
    </OrchestrationSteps>
  </UserJourney>
</UserJourneys>

6. 关键前置要求

所有动态设置的重定向URL,必须提前添加到Azure B2C租户的身份验证 > 应用注册 > 目标应用 > 身份验证 > 重定向URI列表中,否则会被策略拒绝。

内容的提问来源于stack exchange,提问作者Alexey Godyl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:59:58