使用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
相关产品推荐
相关产品推荐

