无论是scp还是roles声明都需要在令牌中出现。

5

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

只要我登录了,我就可以使用Graph Explorer成功地完成这项工作,但是无法在Postman中使用Bearer令牌使其正常工作。

我得到的错误是:令牌中必须存在scp或roles声明

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

https://login.microsoftonline.com/common/oauth2/v2.0/token

传入grant_type、client_id、client_secret、code、redirect_uri和scope。

接着,我执行以下调用,并在头部包含访问令牌:

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"
        }
    }
}

我已按照以下设置图形权限。我也尝试启用了所有注释权限,但结果相同。 图形权限图像 我发现一篇文章说要检查返回令牌中的内容,可以在http://jwt.calebb.net/上进行检查,我发现它不包含任何角色,因此我想这可能是问题所在。

你尝试过像在图形浏览器中那样调用 https://graph.microsoft.com/v1.0/me/onenote/notebooks 吗? - Jorge Aguirre
不可能。我没有连接到用户端点,所以“/me”会抛出一个错误,说明这样做是不可能的。 - user3665749
你能解决这个问题吗?我觉得我遇到了同样的问题。 - fei0x
1
哦,我知道了,我有一个v1应用程序,但我试图调用v2 OAuth端点。此外,我在使用SharePoint权限时,应该使用Microsoft Graph中的站点权限。 - fei0x
这个回答解决了你的问题吗?在使用应用程序权限读取SharePoint站点时,令牌中必须包含scp或roles声明之一。链接 - H. Pauwelyn
2个回答

4

当获取令牌时,您可能需要在URL中指定您的租户:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token

感谢 Tsuyoshi Matsuzaki 的帮助,详情请见:如何使用 Azure AD v2 的应用程序权限

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


文档中并没有明确说明,所以感谢您指出。 - itslittlejohn

1

所以认证正在工作,我按照链接#3收到了一个认证令牌(在我的情况下,链接#2不相关)。我之前已经阅读过链接#1,但重新阅读似乎我需要使用/user/{id}/notes端点,并只传递可以访问我需要的所有笔记本的服务帐户的ID。我会尝试这样做,并在确认后标记答案。 - user3665749
好的,这个不起作用。当我尝试连接到 /users/{id}/notes 时,它试图带我去 OneDrive 数据,但这些数据存储在 SharePoint 上。似乎没有 /users/{id]/sites 端点可以走这条路。 - user3665749
我也尝试过添加Sites.Read.All,但没有成功。 - user3665749
我尝试调用https://graph.microsoft.com/v1.0/sites/companyname.sharepoint.com,11111111-1111-1111-1111-1111111111,11111111-1111-1111-1111-1111111111/onenote/notebooks,但返回“OneDrive for Business未为此用户配备”的错误。这很奇怪,因为我的令牌应该是用于应用程序权限而不是用户权限。 - user3665749
这个请求失败了,因为站点ID不正确。你能再检查一下你的站点ID吗? - Manjusha
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接