Sharepoint 图形API 403禁止-令牌中需要存在scp或角色声明

Sharepoint 图形API 403禁止-令牌中需要存在scp或角色声明,sharepoint,azure-active-directory,microsoft-graph-api,sharepoint-api,Sharepoint,Azure Active Directory,Microsoft Graph Api,Sharepoint Api,我的应用程序在调用Sharepoint/sites/root时失败,并显示403:禁止消息。我的授权流程遵循以下步骤 要得到代币,我先打电话给 这允许我与管理员登录并发现租户id。如果接受,调用将返回查询参数admin_approve=TRUE和租户id 然后,我使用此命令与请求中的以下主体进行第二次后通话: client\u id=XXX&grant\u type=client\u credentials&client\u secret=XXX&scope=https%3A%2F%2Fgra

我的应用程序在调用Sharepoint/sites/root时失败,并显示403:禁止消息。我的授权流程遵循以下步骤

要得到代币,我先打电话给

这允许我与管理员登录并发现租户id。如果接受,调用将返回查询参数admin_approve=TRUE和租户id

然后,我使用此命令与请求中的以下主体进行第二次后通话: client\u id=XXX&grant\u type=client\u credentials&client\u secret=XXX&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default

注意:范围设置为默认值()。我在注册应用程序时请求将Sites.ReadWrite.All作为应用程序权限,仅此而已

答复是:

'token_type': 'Bearer',
'expires_in': 3599,
'ext_expires_in': 3599,
'access_token': 'eyJ0...' (deliberately masked)
然后,我尝试在我的应用程序中使用/sites/root端点,并收到错误“令牌中需要存在scp或角色声明”。当我使用解码令牌时,我看不到“角色”参数可见

在Azure应用程序中,我可以看到应用程序确实已成功授予管理员访问权限,那么为什么我的令牌不能正确返回?我错过了什么?当然,通过用户/管理员同意,作为第一个API调用,我也不需要在Azure门户中手动授权

编辑:大约50分钟后,进行第二次API调用以获取新令牌,因为第一个令牌即将到期,这似乎有效,我在解码的令牌中获得了“角色”。graph api上是否存在导致此问题的错误

"roles": [
    "Sites.ReadWrite.All"
],
graph api上是否存在导致此问题的错误

"roles": [
    "Sites.ReadWrite.All"
],

这不是一个错误,您所做的一切都是正确的,只是一个简单的延迟问题,当您请求令牌时,权限没有生效。

Hmm。那么,最好的做法是,处理错误并在此时请求一个新令牌,然后重试吗?典型的延迟时间是多长?@Jamiellowe Yeath,根据我的经验,大约是5分钟到10分钟。我会接受这个答案——看起来确实有延迟。我还向微软提出了一个案例,看看他们是否能提出进一步的建议。