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

如何通过Graph API或PowerShell获取AAD企业应用的登录数据?

解决AAD应用登录记录查询与门户一致的问题

问题根源分析

你遇到的过滤无结果问题,大概率是混淆了应用注册的AppId和企业应用的ObjectId,或是查询时未覆盖正确时间范围、权限不足。Azure门户企业应用里显示的"应用ID"就是应用注册的AppId,但如果误把企业应用的对象ID当成AppId过滤,自然会返回空结果。另外,auditLogs/signins接口默认仅返回最近30天数据,若要查询X个月的记录,必须指定时间范围参数。

正确实现步骤

1. 确认所需权限

调用auditLogs/signins需要以下管理员同意的权限之一:

  • AuditLog.Read.All
  • Directory.Read.All

2. 精准过滤与时间范围设置

使用Beta接口时,确保过滤条件用应用注册的AppId(而非企业应用的ObjectId),同时指定startDateTime和endDateTime覆盖目标时间范围。示例请求:

GET https://graph.microsoft.com/beta/auditLogs/signins?filter=appId eq '你的应用AppId' and createdDateTime ge 2024-01-01T00:00:00Z&$top=100

注:$top默认最多返回100条数据,需获取更多时,通过@odata.nextLink分页遍历。

3. 匹配门户显示的登录记录

门户企业应用的登录记录,对应signins日志中appId匹配该应用的条目,需注意:

  • 部分应用通过服务主体登录时,signInIdentifier会显示服务主体名称,但appId仍对应应用注册的AppId
  • 多环境部署的应用,需确认AppId唯一对应目标应用

4. 批量筛选未使用应用的脚本逻辑

若要批量清理X个月无登录的应用,可按以下流程编写脚本:

  • 调用GET /applications获取所有应用注册的AppId列表
  • 逐个AppId调用signins接口,查询指定时间范围内的登录记录
  • 收集无任何登录记录的AppId,执行后续清理操作

常见坑点规避

  • 禁止用企业应用的ObjectId作为appId过滤条件,必须使用应用注册页面的"应用程序(客户端)ID"
  • 查询超过30天的数据时,必须显式指定startDateTime,否则接口仅返回最近30天结果
  • 权限需覆盖全流程:仅AuditLog.Read.All只能访问登录日志,读取应用注册信息还需Directory.Read.All

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:06