Entra B2C自定义策略:邀请注册时自定义声明持久化至用户属性失败
Azure AD B2C 邀请注册自定义策略问题解决方案
一、解决声明未在用户旅程中输出的报错
报错核心是依赖方(RP)声明要输出的advisorId/clientId,但对应用户旅程SignInWithIdTokenHint的所有步骤里,没有任何步骤输出这两个声明。需补充以下配置:
- 注册流程:确保
IdTokenHint_ExtractClaims技术配置文件在注册步骤中被调用,且其<OutputClaims>节点包含advisorId和clientId,保证提取的声明能流入后续流程。 - 登录流程:修改读取用户信息的技术配置文件(如
AAD-UserReadUsingObjectId),在<OutputClaims>中添加:
同时确保登录用户旅程的步骤中调用了该技术配置文件,让声明能进入用户旅程的输出链路。<OutputClaim ClaimTypeReferenceId="advisorId" PartnerClaimType="extension_AdvisorId" /> <OutputClaim ClaimTypeReferenceId="clientId" PartnerClaimType="extension_ClientId" />
二、实现邀请声明到用户属性的持久化
要将提取的声明保存到用户属性,需修改注册用技术配置文件(如LocalAccountSignUpWithLogonEmail):
- 在
<InputClaims>中添加接收声明的配置,确保注册流程能获取到邀请token中的值:<InputClaim ClaimTypeReferenceId="advisorId" /> <InputClaim ClaimTypeReferenceId="clientId" /> - 在
<PersistedClaims>中添加写入用户存储的映射,将声明关联到自定义用户属性(注意自定义属性自动带extension_前缀):<PersistedClaim ClaimTypeReferenceId="advisorId" PartnerClaimType="extension_AdvisorId" /> <PersistedClaim ClaimTypeReferenceId="clientId" PartnerClaimType="extension_ClientId" />
三、确保登录时返回声明
除了在RP中配置输出声明,还需保证登录流程能正确读取并传递声明:
- 确认读取用户信息的技术配置文件(如
AAD-UserReadUsingObjectId)已添加advisorId和clientId的输出声明(参考第一部分登录流程的配置)。 - 检查登录用户旅程的步骤顺序,确保在生成token前已执行用户信息读取步骤,让声明能被包含在最终的输出token中。
四、验证用户旅程步骤链路
检查SignInWithIdTokenHint用户旅程的步骤完整性:
- 注册链路:提取邀请token声明 → 注册信息收集 → 写入用户属性 → 生成输出token
- 登录链路:身份验证 → 读取用户属性(含
advisorId/clientId) → 生成输出token
确保每个环节的技术配置文件都正确输出所需声明,形成完整的声明传递链路。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

