B2C服务条款与社交登录:如何避免Azure B2C每次IDP登录都提示同意服务条款
问题根因
你当前使用的版本化服务条款自定义策略默认仅实现了本地账号的TOU同意状态校验逻辑,第三方IDP登录的用户旅程未加入已同意状态的读取和判断流程,因此每次用户通过第三方IDP登录都会触发同意提示。
修复步骤
- 首先确认你已在B2C目录中创建了两个扩展用户属性:
consentAcceptedVersion(存储用户同意的TOU版本号)、consentAcceptedDateTime(存储用户同意的时间),且为属性配置了正确的读写权限,确保第三方IDP登录的流程可以正常读写这两个属性。 - 修改用户旅程编排步骤,在第三方IDP账号验证完成后、TOU同意页面展示前,新增调用
AAD-UserReadUsingAlternativeSecurityId技术配置文件的步骤,将用户已存储的TOU同意版本号读取到当前会话的Claims中。 - 为TOU同意页面对应的编排步骤添加前置判断条件:如果当前会话中读取到的
consentAcceptedVersion值大于等于当前生效的TOU版本号,则直接跳过该同意步骤。 - 确认用户首次完成TOU同意后,流程会调用
AAD-UserWriteUsingAlternativeSecurityId技术配置文件,将用户本次同意的版本号和时间写入到对应第三方账号的扩展属性中,和本地账号的写入逻辑保持一致。
核心配置参考
你可以在TOU同意页面对应的编排步骤中添加如下前置条件实现跳过逻辑:
<Precondition Type="ClaimCompare" ExecuteActionsIf="true"> <Value>consentAcceptedVersion</Value> <Value>1.0</Value> <!-- 替换为你当前生效的TOU版本号 --> <Action>SkipThisOrchestrationStep</Action> </Precondition>
内容的提问来源于stack exchange,提问作者ATrivino
相关产品推荐
相关产品推荐

