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

使用Python调用Microsoft Graph API无法获取用户最后登录时间

如何通过Microsoft Graph API获取Entra ID用户的最后登录时间字段

问题描述

调用Microsoft Graph API的GET https://graph.microsoft.com/v1.0/users/{user_id}?$select=displayName,lastNonInteractiveSignInDateTime,lastSignInDateTime,userPrincipalName接口时,仅返回displayName和userPrincipalName字段,lastNonInteractiveSignInDateTime和lastSignInDateTime未出现在响应中。

解决方法

1. 确认应用权限配置

使用客户端凭证流(client_credentials)时,应用必须拥有应用权限而非委派权限,且已获得管理员同意:

  • 登录Entra ID控制台,找到你的应用注册
  • 进入「API权限」页面,添加Microsoft Graph的应用权限:User.Read.All或AuditLog.Read.All
  • 点击「授予管理员同意」,确保权限生效

2. 检查用户登录历史

如果用户从未执行过交互式或非交互式登录,这两个字段不会返回值。可以在Entra ID的「用户登录活动」中验证该用户是否有登录记录。

3. 改用登录日志端点获取详细记录

如果直接获取用户属性失败,可以调用登录日志接口获取最近登录信息:

# 获取用户最近一次登录记录
log_url = f"https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=userId eq '{user_id}'&$orderby=createdDateTime desc&$top=1"
log_response = requests.get(log_url, headers=headers)
print(log_response.json())

该接口会返回包含createdDateTime(登录时间)、signInType(登录类型)的完整记录,需确保应用拥有AuditLog.Read.All应用权限。

4. 验证访问令牌权限

解码你的access_token(可使用离线工具如jwt.ms),检查roles字段是否包含User.Read.All或AuditLog.Read.All。如果权限缺失,需重新配置应用权限后重新获取令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:03:29