我正在向Microsoft Graph REST api(测试版)发出请求,特别是登录事件端点:https://graph.microsoft.com/beta/auditLogs/signIns
我正在发出批量请求,以1000为一批检索特定用户的登录。从9月25日开始,大约10到50批之后,这些请求将失败,并带有以下响应,并显示400(无效请求)HTTP错误代码:
"error": {
"code": "",
"message": "Token not found: token is either invalid or expired",
"innerError": {
"request-id": "[request-id-redacted]",
"date": "2019-09-30T22:27:36"
}
}
但是,如果我在等待〜1秒后使用相同的JWT访问令牌重试请求 ,则请求成功,并且我能够完成我所从事的工作的所有批处理请求运行。我最初进行身份验证时收到的访问令牌会在1小时后过期,但是收到我的令牌后,此错误会在〜1-15分钟内消失(我已确认获得令牌的Unix时间戳到期日期)。
我想知道导致此错误的原因是什么,以及如何避免此错误,而不是硬编码特定的响应消息并重试。我也无法在Google上找到该错误消息的任何匹配项。以前有人从Microsoft Graph API中看到此错误吗?
答案 0 :(得分:3)
“我也无法在Google上找到该错误消息的任何匹配项。以前有人从Microsoft Graph API中看到此错误吗?”
是的。我正在查询https://graph.microsoft.com/beta/reports/credentialUserRegistrationDetails MS Graph端点,并且看到的东西完全一样。状态代码为400的间歇响应和以下错误消息: 请求访问令牌仅一分钟后,“找不到令牌:令牌无效或已过期”。
我使用@ odata.nextLink值来翻页结果,但是由于这个问题,事实证明它非常不可靠。有时我会得到全部结果,而其他时候我只会得到其中的一部分。 即使我在每个nextLink请求之间睡了5秒钟,错误仍然会出现。
这件事本周开始在我身上发生。在我获得一致的结果之前。
您执行重试的方法可能是目前最好的方法:
if response.status_code == 400:
retry_request()
答案 1 :(得分:0)
这似乎是一个错误。根据{{3}},看来有些情况可能会导致文件记录的20个限制的计数更高。您可能想尝试节制自己,以便以较低的速率发送请求。