You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何区分B2C应用注册与登录用户?添加声明仍无新用户标识

区分Azure AD B2C中新注册用户与存量登录用户的解决方案

问题根源

默认的Sign Up/Sign In用户流不会自动返回用户是否为首次登录的标识,常规应用声明里也没有这类字段,必须通过自定义属性或目录扩展声明来实现。


方案1:通过自定义属性标记新用户

  1. 创建自定义属性
    在Azure AD B2C租户的「用户属性」页面,新建一个布尔型属性(比如extension_IsNewUser)。
  2. 配置用户流
    • 进入目标Sign Up/Sign In用户流,在「用户属性」标签下,将extension_IsNewUser添加到「收集的属性」(注册时自动设为true)和「返回的属性」列表。
    • 切换到「应用程序声明」标签,勾选这个自定义属性,确保它被包含在token中。
  3. 代码中识别
    从token的claims里直接读取extension_IsNewUser字段,true即为新注册用户,后续登录该值保持不变。

方案2:利用目录扩展声明判断

无需创建自定义属性,直接使用B2C内置的用户时间戳字段:

  1. 配置应用声明
    在用户流的「应用程序声明」里,勾选「用户创建时间」和「上次登录时间」,这两个属于目录扩展声明,会以createdDateTime和lastSignInDateTime的键名出现在token中。
  2. 代码逻辑判断
    通过对比用户创建时间和本次登录时间的差值,判断是否为首次登录(可自定义阈值,比如5分钟内视为新用户):
    var createdTime = DateTime.Parse(tokenClaims["createdDateTime"]);
    var lastSignInTime = DateTime.Parse(tokenClaims["lastSignInDateTime"]);
    bool isNewUser = (lastSignInTime - createdTime).TotalMinutes < 5;
    

常见问题排查(针对已添加声明但无法获取的情况)

  • 确认勾选的是目录扩展声明(如用户创建时间)而非常规应用声明,部分特殊字段不在常规声明列表里。
  • 自定义属性需先在租户创建,再添加到用户流的「收集/返回属性」,最后在应用声明里勾选,三个步骤缺一不可。
  • 修改用户流后,需重新发起认证请求,旧token不会包含新添加的claim。

内容的提问来源于stack exchange,提问作者Shawne49

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:20:28