如何通过Graph API获取无效用户名尝试的日志?
问题解答
核心原因
这类无效用户名的登录尝试不会被记录在auditLogs/signIns端点,属于Azure AD的设计限制。当Azure AD检测到请求中的用户名不存在于租户目录时,不会生成完整的登录会话记录,因此无法通过该端点查询到对应事件。
可行的替代方案
1. 使用Azure AD Identity Protection的风险检测端点
如果你的租户拥有Azure AD Premium P1/P2许可证,可以通过identityProtection/riskDetections端点获取这类事件:
- 调用示例:
GET https://graph.microsoft.com/v1.0/identityProtection/riskDetections?$filter=riskEventType eq 'userNotFound' - 权限要求:
IdentityRiskEvent.Read.All - 这类事件会被标记为
userNotFound类型的风险检测,包含请求的相关元数据(如时间、客户端信息、错误详情等)。
2. 调整登录日志的筛选逻辑
部分场景下这类事件可能会出现在auditLogs/signIns中,可调整筛选条件尝试查询:
- 不要仅依赖
correlationId(部分场景下该ID不会关联到登录日志),改用错误代码筛选:GET https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=status/errorCode eq '50034' - 注意:需确保应用已被授予
AuditLog.Read.All和Directory.Read.All权限,同时等待日志同步延迟(最长15分钟),这种方式仅在部分场景下有效。
3. 导出到Azure Monitor Log Analytics
将Azure AD登录日志导出到Log Analytics工作区后,可通过Kusto查询精准检索这类事件:
SigninLogs | where ResultType == "50034" | where ResultDescription contains "does not exist in the directory"
你也可以通过Azure Monitor的API查询这些日志数据,但这不属于Graph API范畴。
总结
- 无AAD Premium许可证的租户:这类无效用户名尝试无法通过Graph API直接获取,属于Azure AD的基础版限制。
- 有AAD Premium P1/P2许可证的租户:使用
identityProtection/riskDetections端点是最可靠的解决方案。
内容的提问来源于stack exchange,提问作者Rafael Moreira
相关产品推荐
相关产品推荐

