如何让Azure AD B2C在新用户注册后通知后端并传递Object ID?
实现Azure AD B2C注册完成后调用后端API的方案
用户流方案(当前使用)
用户流本身没有内置的注册后触发API的选项,但可以通过Azure Event Grid事件通知实现需求:
- 登录Azure门户,进入你的B2C租户,找到「事件」菜单,启用Event Grid集成,勾选「用户创建」事件类型。
- 创建Event Grid订阅:选择终点类型为「Webhook」,填入你的后端Webhook地址;如果需要中转处理,也可以选择Azure Function作为终点,再由Function转发请求到你的API。
- 事件触发后,Event Grid会向你的终点发送包含用户信息的JSON payload,其中
objectId字段即为用户的Object ID,直接提取该字段传递给后端即可。
自定义策略方案(后续迁移)
自定义策略支持在用户注册流程的用户创建完成后添加REST API调用步骤,完全满足你的需求:
- 定义REST API技术配置
在TrustFrameworkExtensions.xml中添加REST API的技术配置,示例如下:<ClaimsProviders> <ClaimsProvider> <DisplayName>REST API</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="REST-NotifyRegistration"> <DisplayName>Notify Registration Complete</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-backend-api.com/registration-notify</Item> <Item Key="SendClaimsIn">Body</Item> <!-- 可选:配置认证方式,比如基本认证 --> <Item Key="AuthenticationType">Basic</Item> <Item Key="UserName">your-api-username</Item> <Item Key="Password">your-api-password</Item> </Metadata> <InputClaims> <!-- 传递Object ID到API --> <InputClaim ClaimTypeReferenceId="objectId" /> <!-- 可选:传递其他用户信息,比如邮箱 --> <InputClaim ClaimTypeReferenceId="email" /> </InputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> </ClaimsProviders> - 在用户旅程中添加API调用步骤
找到注册用户的User Journey(通常在TrustFrameworkBase.xml或TrustFrameworkExtensions.xml中),在「创建用户」的步骤之后、「发送令牌」的步骤之前,添加一个编排步骤:<UserJourney Id="SignUp"> <OrchestrationSteps> <!-- 前面的步骤:收集用户信息、验证等 --> <OrchestrationStep Order="5" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="CreateUser" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" /> </ClaimsExchanges> </OrchestrationStep> <!-- 添加这一步:调用注册通知API --> <OrchestrationStep Order="6" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="NotifyRegistration" TechnicalProfileReferenceId="REST-NotifyRegistration" /> </ClaimsExchanges> </OrchestrationStep> <!-- 后面的步骤:发送令牌等 --> <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney> - 错误处理配置
可选:如果需要处理API调用失败的情况,可以在技术配置中添加错误处理规则,比如重试或返回错误信息给用户:<Metadata> <!-- 添加重试配置 --> <Item Key="RetryIntervalSeconds">5</Item> <Item Key="NumberOfRetries">2</Item> </Metadata> <OutputClaims> <!-- 如果API返回错误信息,可以映射到声明并显示给用户 --> <OutputClaim ClaimTypeReferenceId="apiError" /> </OutputClaims>
注意事项
- Event Grid方案是异步触发,适合不需要同步等待API响应的场景;自定义策略方案是同步触发,可在流程中处理API响应。
- 确保后端API能处理来自Azure B2C或Event Grid的请求,包括IP白名单、认证校验等。
- 自定义策略中,
objectId在用户创建完成后会自动加入声明包,可直接作为输入声明传递给API。
内容的提问来源于stack exchange,提问作者me.at.coding
相关产品推荐
相关产品推荐

