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

如何在Azure AD B2C中添加用户最后登录日期?Graph API无返回该属性

问题分析与解决方案

你遇到的核心问题是:自定义声明extension_LastLogin在用户流程中被正确生成并返回(所以AuthenticationContext里能看到),但未被持久化到Azure AD B2C的用户存储中,导致Graph API无法查询到该属性值。以下是具体的排查和修复步骤:

1. 添加持久化声明配置

在负责写入用户数据的TechnicalProfile中(比如登录流程里的AAD-UserWriteProfile、注册流程里的AAD-UserWriteUsingEmailAddress等),添加PersistedClaims节点,指定要保存的自定义属性,确保B2C将生成的时间值写入用户目录:

<PersistedClaims>
    <!-- 保留其他已有的持久化声明 -->
    <PersistedClaim ClaimTypeReferenceId="extension_LastLogin" />
</PersistedClaims>

注意:要确保这个TechnicalProfile在执行GetLastLoginDateTime转换之后被调用,这样生成的最新时间才会被保存。

2. 确认Graph API查询的属性名称格式

Azure AD B2C的自定义属性在Graph API中的名称格式为:extension_<扩展应用ID(去掉横杠)>_属性名。比如你的B2C扩展应用ID是12345678-1234-1234-1234-1234567890ab,那么对应的属性名是extension_123456781234123412341234567890ab_LastLogin。

在.NET SDK调用时,需要通过$select指定该属性才能返回:

// 替换为实际的用户ID和去横杠后的扩展应用ID
var userId = "目标用户的Object ID";
var extensionAppIdWithoutDashes = "123456781234123412341234567890ab";
var lastLoginPropertyName = $"extension_{extensionAppIdWithoutDashes}_LastLogin";

var user = await graphClient.Users[userId]
    .Request()
    .Select($"id,{lastLoginPropertyName}")
    .GetAsync();

// 从AdditionalData中获取自定义属性值
var lastLoginValue = user.AdditionalData[lastLoginPropertyName];

3. 验证权限配置(可选)

如果其他自定义属性能正常通过Graph API获取,这一步大概率没问题,但可以快速确认:

  • .NET SDK使用的应用注册已被授予User.Read(读取当前用户)或User.Read.All(读取所有用户)权限
  • 权限已完成管理员授予(如果是应用权限类型)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:10:28