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

如何通过API提取Azure AD中按上次修改日期筛选的用户

按上次修改日期提取Azure AD用户的实现方案

你不需要更换其他接口,你当前调用的/users端点本身就支持按修改时间筛选,之前只能拿到全量数据基本是没用到正确的查询参数和请求头,具体可落地的方案如下:

  • 直接使用OData筛选参数按需拉取
    针对单次按时间节点拉取的场景,直接在现有请求上追加高级筛选参数即可,注意必须携带指定请求头,否则筛选逻辑不生效:
    1. 给请求添加头字段:ConsistencyLevel: eventual
    2. 在URL中追加$count=true参数开启高级查询能力
    3. 用$filter参数对lastModifiedDateTime属性做时间范围判断,时间值使用UTC时区的ISO 8601格式
      示例请求(拉取2024年1月1日0点之后修改过的用户):
    GET https://graph.microsoft.com/v1.0/users?$count=true&$filter=lastModifiedDateTime ge 2024-01-01T00:00:00Z&$select=id,displayName,userPrincipalName,lastModifiedDateTime
    ConsistencyLevel: eventual
    
    如果你要筛选的是从本地Active Directory同步到Azure AD的用户、需要按本地侧最后同步时间筛选,把筛选属性替换为onPremisesLastSyncDateTime即可,参数用法完全一致。
  • 使用增量查询接口适配定期同步场景
    如果你的业务是定时拉取变更用户(比如每天同步一次新增/修改的用户数据),更推荐用用户增量delta接口,不需要自己维护时间戳,接口会自动返回两次查询之间的所有变更(含新增、修改、删除的用户),不会出现时间偏差导致的漏数问题:
    首次调用示例:
    GET https://graph.microsoft.com/v1.0/users/delta?$select=id,displayName,userPrincipalName,lastModifiedDateTime
    ConsistencyLevel: eventual
    
    首次请求会按你选的字段返回全量用户,通过响应中的@odata.nextLink逐页拉完所有数据后,响应会携带@odata.deltaLink字段,你只需要把这个链接持久化存储,下次定时任务直接请求这个delta链接,就能拿到自上次拉取之后所有变更的用户数据。
  • 常见注意事项
    • 未携带ConsistencyLevel: eventual头是最常见的踩坑点,这种情况接口会返回400错误,提示不支持对应属性的筛选,很容易让人误以为接口本身不支持时间筛选
    • 单页返回结果上限为999条,数据量大的时候一定要跟随响应里的@odata.nextLink逐页翻页,不要手动拼接$skip参数,数据量超过一定阈值后$skip会失效
    • 传入筛选的时间必须是UTC时区,不要使用本地时区时间,否则会出现8小时(东八区)的筛选偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:45:45