Azure AD B2C集成RESTful API:如何基于输出声明重定向至不同URL
根据Web API返回的声明实现Azure AD B2C条件重定向
我来给你拆解一下具体的实现步骤,核心就是让Azure AD B2C获取到你的Web API返回的标志声明后,根据这个值触发不同的重定向逻辑:
1. 让Web API返回对应的重定向标志声明
首先确保你的ASP.NET Web API在验证业务逻辑后,返回包含重定向标识的声明(可以是布尔标志或者直接是目标URL),响应格式要符合Azure AD B2C的要求,比如:
{ "version": "1.0.0", "status": "200", "claims": { // 方案一:用布尔标志区分不同场景 "needsRedirectToProfile": "true", // 方案二:直接返回目标URL "redirectTargetUrl": "https://your-custom-profile-page.com" } }
2. 在B2C自定义策略中注册这个声明
打开你的自定义策略XML文件,先在<ClaimsSchema>节点下定义这个新声明,让B2C能识别它:
<!-- 注册布尔标志声明 --> <ClaimType Id="needsRedirectToProfile"> <DisplayName>Need Redirect to Profile Page</DisplayName> <DataType>boolean</DataType> </ClaimType> <!-- 或者注册URL类型声明 --> <ClaimType Id="redirectTargetUrl"> <DisplayName>Redirect Target URL</DisplayName> <DataType>string</DataType> </ClaimType>
然后在<RelyingParty>节点的<OutputClaims>里添加这个声明,确保它能在用户旅程中被传递:
<OutputClaim ClaimTypeReferenceId="needsRedirectToProfile" /> <!-- 或者 --> <OutputClaim ClaimTypeReferenceId="redirectTargetUrl" />
3. 添加条件重定向的逻辑到用户旅程
接下来要在用户旅程中,调用完你的Web API之后,添加一个条件步骤来触发重定向。这里分两种方案:
方案一:根据布尔标志重定向
先定义一个用于重定向的技术配置文件:
<TechnicalProfile Id="RedirectToProfilePage"> <DisplayName>Redirect to User Profile Page</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RedirectToUrlProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="Url">https://your-custom-profile-page.com</Item> </Metadata> </TechnicalProfile>
然后在用户旅程的<OrchestrationSteps>中,在调用Web API的步骤之后,添加一个条件步骤:
<!-- 假设调用Web API的步骤是Order="5",这里就设为Order="6" --> <OrchestrationStep Order="6" Type="ClaimsExchange"> <Preconditions> <!-- 如果不需要重定向,就跳过这个步骤 --> <Precondition Type="ClaimEquals" ExecuteActionsIf="false"> <Value>needsRedirectToProfile</Value> <Value>true</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="RedirectToProfile" TechnicalProfileReferenceId="RedirectToProfilePage" /> </ClaimsExchanges> </OrchestrationStep>
方案二:直接使用返回的URL重定向
这种方式更灵活,适合多个重定向目标的场景。先定义技术配置文件:
<TechnicalProfile Id="RedirectToDynamicUrl"> <DisplayName>Redirect to Dynamic Target URL</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RedirectToUrlProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <!-- 直接使用返回的声明作为URL --> <Item Key="Url">{redirectTargetUrl}</Item> <Item Key="UseClaimAsUrl">true</Item> </Metadata> </TechnicalProfile>
然后在用户旅程中添加步骤:
<OrchestrationStep Order="6" Type="ClaimsExchange"> <Preconditions> <!-- 如果没有返回URL,就跳过 --> <Precondition Type="ClaimExists" ExecuteActionsIf="false"> <Value>redirectTargetUrl</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="RedirectToDynamic" TechnicalProfileReferenceId="RedirectToDynamicUrl" /> </ClaimsExchanges> </OrchestrationStep>
4. 关键注意事项
- 所有重定向的目标URL必须添加到Azure AD B2C租户中对应应用注册的允许的重定向URI列表里,否则B2C会拒绝重定向。
- 确保你的Web API返回的声明名称和策略中定义的
ClaimType Id完全一致,大小写敏感。
内容的提问来源于stack exchange,提问作者Tunc Altinbas
相关产品推荐
相关产品推荐

