Microsoft Graph API技术问询:如何获取非活跃用户列表
如何通过Microsoft Graph API获取非活跃用户列表
要获取非活跃用户,核心是基于**用户登录活动(signInActivity)**进行筛选,通常将超过指定时长未登录(或从未登录)的用户定义为非活跃用户。以下是具体实现方案:
实现逻辑与代码修改
1. 定义非活跃阈值
首先确定判定非活跃的时间阈值(比如90天),然后基于UTC时间计算阈值点(lastSignInDateTime存储的是UTC时间)。
2. 添加筛选条件
在你的原代码基础上,通过.Filter()方法添加筛选规则,覆盖两种非活跃场景:
- 有登录记录,但最后登录时间早于阈值
- 从未登录过(
lastSignInDateTime为null)
修改后的代码如下:
var graphClient = MicrosoftGraph.GetGraphClient(tenantId, clientId); // 设置非活跃阈值:这里以90天为例,计算UTC时间的阈值点 var inactiveThreshold = DateTime.UtcNow.AddDays(-90).ToString("o"); var users = await graphClient.Users .Request() .Select("displayName,signInActivity") // 筛选非活跃用户:最后登录早于阈值 或 无登录记录 .Filter($"signInActivity/lastSignInDateTime le {inactiveThreshold} OR signInActivity/lastSignInDateTime eq null") .GetAsync();
关键注意事项
- 权限要求:必须配置
User.Read.All或Directory.Read.All的应用权限(委派权限无法获取全部用户的登录活动数据) - 时区处理:务必使用UTC时间计算阈值,避免因时区差异导致筛选结果错误
- 分页处理:Graph API默认单次返回最多100条数据,如果租户用户较多,需要使用
PageIterator遍历所有分页结果 - 特殊用户:部分系统用户(如服务主体)可能没有
signInActivity数据,会被纳入非活跃列表,可根据需求添加额外筛选规则排除
内容的提问来源于stack exchange,提问作者redoc01
相关产品推荐
相关产品推荐

