Microsoft graph api 令牌中需要存在scp或角色声明

Microsoft graph api 令牌中需要存在scp或角色声明,microsoft-graph-api,onenote,Microsoft Graph Api,Onenote,我正在尝试构建一个应用程序,它使用Microsoft Graph自动创建和读取存储在SharePoint 365中的OneNotes中的页面 只要我登录,我就可以使用Graph Explorer成功地完成这项工作,但在Postman中使用承载令牌无法使其工作 我得到的错误是: 令牌中需要存在scp或角色声明 我使用以下方法成功获取访问令牌: https://login.microsoftonline.com/common/oauth2/v2.0/token 并传入授权类型、客户端id、客户端机

我正在尝试构建一个应用程序,它使用Microsoft Graph自动创建和读取存储在SharePoint 365中的OneNotes中的页面

只要我登录,我就可以使用Graph Explorer成功地完成这项工作,但在Postman中使用承载令牌无法使其工作

我得到的错误是: 令牌中需要存在scp或角色声明

我使用以下方法成功获取访问令牌:

https://login.microsoftonline.com/common/oauth2/v2.0/token
并传入授权类型、客户端id、客户端机密、代码、重定向uri和作用域

然后我执行以下调用,头中包括承载令牌:

https://graph.microsoft.com/v1.0/sites
将返回以下内容:

{
    "error": {
        "code": "AccessDenied",
        "message": "Either scp or roles claim need to be present in the token.",
        "innerError": {
            "request-id": "fa442c72-4ffe-493b-a33a-8e9e78c94f09",
            "date": "2018-01-19T09:56:34"
        }
    }
}
我已按照以下设置了图形权限。不过,我也尝试过启用配置为相同结果的所有Notes权限


我找到的一篇帖子说要检查令牌中返回的内容,我发现它不包含任何角色,所以我想知道这是否是问题所在。

您提到的调用“”无效。 还请求~/sites/。。。路由可能需要Notes.ReadWrite之外的其他权限

建议遵循以下参考文献中提到的步骤:


  • 获取令牌时,您可能需要在url中声明您的租户:

    https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
    
    如图所示,感谢松崎骏:

    您的应用程序可以使用以下HTTP请求获取访问令牌 (OAuth)。请注意,您不能使用
    https://login.microsoftonline.com/common/oauth2/v2.0/token
    (即 常用)用于获取令牌。相反,您必须使用
    https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
    ,其中 标识特定租户


    您是否尝试过在图形浏览器中调用?不可能。我没有连接到用户端点,所以/me只是抛出一个错误,说明您是否能够解决此问题?我想我遇到了同样的问题。哦,我明白了,我有一个v1应用程序,但我试图调用v2 OAuth端点。我还使用了Sharepoint权限,当时我应该在Microsoft Graph中使用站点权限。因此,身份验证正在工作,并且我收到了一个身份验证令牌,链接为#3(#2与我的情况无关)。我以前读过链接#1,但重新阅读后,似乎需要使用/user/{id}/notes端点,只需传递一个服务帐户的id即可访问我需要的所有笔记本。我会尝试一下,确认后再标记答案,所以这不起作用。当我尝试连接到/users/{id}/notes时,它试图将我带到onedrive数据,但这些数据存储在sharepoint上。似乎没有/users/{id]/sites端点进入该路径。我也尝试添加sites.Read.All,没有luckFirst,路径/users/{id}/notes不正确。它应该是/users/{id}/onenote。如果您的笔记本在SharePoint上,并且您知道站点id,则可以使用GET{siteId}/onenote/笔记本。站点id看起来像是从GET类查询返回的复合id,该查询的值以逗号分隔。我尝试了该调用。由此,我得到“OneDrive for Business未为此用户设置”。这很奇怪,因为我的令牌应该用于应用程序权限,而不是用户权限。文档中没有明确说明这一点,因此感谢您的提醒。