AAD B2C自定义策略更新自定义属性后读取最新值存在延迟问题
问题背景
我们为应用编写了两套自定义策略:verify_email 与 signup_sign_in 策略。注册阶段不使用OTP验证邮箱,而是向用户发送欢迎邮件,邮件内附指向verify_email自定义策略的链接,链接包含由我们的证书签名的id_token提示。verify_email策略从id_token中获取用户主体,从AAD拉取用户数据,更新email_verified自定义属性后将用户重定向回应用。
该过程为无UI的无感流程。由于返回的令牌来自verify_email策略,应用无法识别该令牌,因此会将用户重定向到AD B2C的signup_sign_in策略,AD B2C识别到verify_email策略创建的当前用户会话后,无需用户主动登录即可将携带所需声明的信息重定向返回给应用。
问题描述
约有一半的场景下,signup_sign_in策略无法获取到刚刚更新的email_verified声明的最新值,向Azure AD写入声明后再读取时,有时会返回旧值,存在延迟,需要解决该延迟问题,确保每次都能获取到正确的属性值。
解决方案
- 优先使用会话存储最新值:在
verify_email策略更新email_verified属性成功后,直接将最新的属性值写入当前B2C会话的声明缓存,signup_sign_in策略配置为优先读取会话内已存储的声明,跳过从AAD拉取用户属性的步骤,完全规避AAD读写延迟的影响。 - 增加写入后的等待窗口:如果必须依赖AAD读取属性,在
verify_email策略完成email_verified属性更新操作后,添加1~2秒的等待步骤,再执行重定向逻辑,留出AAD跨节点数据同步的时间窗口。 - 配置读取重试机制:修改
signup_sign_in策略的用户属性读取逻辑,新增重试规则:首次读取到email_verified为旧值时,间隔500ms后重试1次拉取用户属性,大幅降低命中未同步数据的概率。 - 统一跨策略会话规则:为两套策略配置统一的会话声明持久化规则,确保
verify_email阶段写入的所有自定义声明都可以被signup_sign_in策略直接读取,无需二次拉取AAD数据。
内容的提问来源于stack exchange,提问作者Sdiego
相关产品推荐
相关产品推荐

