【问题标题】:Either scp or roles claim need to be present in the token令牌中必须存在 scp 或角色声明
【发布时间】:2018-01-19 10:17:41
【问题描述】:

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

只要我登录,我就可以使用 Graph Explorer 成功执行此操作,但无法使用 Postman 中的不记名令牌使其工作

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

我使用这个成功获得了访问令牌:

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

我已按以下方式设置图表权限。我也尝试过启用所有配置为相同结果的 Notes 权限 Graph Permissions Image

我发现一个帖子说检查http://jwt.calebb.net/令牌中返回的内容,我发现它不包含任何角色,所以我想知道这是否是问题。

【问题讨论】:

标签: microsoft-graph-api onenote


【解决方案1】:

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

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

感谢 Tsuyoshi Matsuzaki 在这里看到:How to use Application Permission with Azure AD v2

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

【讨论】:

  • 这在文档中并不清楚,所以感谢您提出来。
【解决方案2】:

您提到的呼叫“https://graph.microsoft.com/v1.0/sites”无效。 除了 Notes.ReadWrite 之外,对 ~/sites/... 路由的请求可能还需要其他权限。

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

  1. https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference
  2. https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_user
  3. https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service

【讨论】:

  • 所以身份验证正在工作,我根据链接 #3 接收到身份验证令牌(在我的情况下,#2 无关紧要)。我之前阅读过链接 #1,但重新阅读似乎我可能需要使用 /user/{id}/notes 端点并传递可以访问我需要的所有笔记本的服务帐户的 ID。确认后我会尝试并标记答案
  • 好的,所以这不起作用。当我尝试连接到 /users/{id}/notes 时,它会尝试将我带到 onedrive 数据,但这些数据存储在 sharepoint 上。似乎没有 /users/{id]/sites 端点可以沿着这条路线走
  • 我也尝试添加 Sites.Read.All,但没有成功
  • 首先,路径/users/{id}/notes不正确。它应该是 /users/{id}/onenote。如果您的笔记本位于 SharePoint 上并且您知道站点 ID,则可以使用 GET graph.microsoft.com/v1.0/sites{siteId}/onenote/notebooks。站点 ID 看起来像从 GET graph.microsoft.com/v1.0/sites/root 类型的查询返回的复合 ID,使用逗号分隔值
  • 我尝试拨打graph.microsoft.com/v1.0/sites/…。这样,我得到“未为此用户配置 OneDrive for Business”。这很奇怪,因为我的令牌应该用于应用程序权限,而不是用户权限
猜你喜欢
  • 1970-01-01
  • 2020-12-28
  • 2021-05-08
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2018-12-31
  • 2021-01-19
相关资源
最近更新 更多