当前位置: 首页 > 知识库问答 >
问题:

scp或角色声明需要出现在令牌中

姜献
2023-03-14

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

只要我登录,我就可以使用 Graph 资源管理器成功执行此操作,但无法使用 Postman 中的持有者令牌使其工作

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

我成功地获得了一个访问令牌:

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

并传递grant_type、client_id、client_secret、代码、redirect_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权限,结果相同

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

共有2个答案

诸葛煜
2023-03-14

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

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

  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
海鸣
2023-03-14

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

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

感谢松崎刚,如图所示:如何在Azure AD v2中使用应用程序权限

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

 类似资料:
  • 我正试图获得一个访问令牌来上传文件中描述的大文件。 我使用客户端凭证授权流来根据文档获取访问令牌。我用那个流得到了一个访问令牌。 我尝试将该访问令牌与此 URI 一起使用: 但是它给我一个错误“拒绝访问scp或角色声明需要在令牌中出现” 我已经授予该应用程序的管理员权限。我已经在postman和编码中尝试了这个流程,但是都给出了相同的错误。

  • 我正在尝试使用MS Graph API从OneDrive for Business获取文件/文件夹列表。我已经在 Graph 资源管理器中成功执行了所需的查询,现在正在继续在我的项目中实现。 我的应用是 Windows 服务,因此我使用此方法获取令牌 我已成功检索到令牌,但当我“获取”此URL时… …我得到了错误的回复: scp或角色声明需要出现在令牌中。 我来自服务器的令牌响应如下:

  • 使用此 URI,我正在尝试生成访问令牌 并且成功地生成了访问令牌。 我正在通过client_id、client_secret、grant_type和范围。 当我试图检查时https://jwt.io/#encoded-jwt我发现这是一个无效的签名。 当我试图通过执行以下调用访问此站点时 使用这些访问令牌,我会得到以下错误:“AccessDenied,scp或roles声明需要出现在令牌中。” 为

  • 我的应用程序在调用Sharepoint /sites/root时失败,并显示403: Forbidden消息。我的授权流程遵循以下步骤。 为了得到一个代币,我首先打电话到https://login.microsoftonline.com/common/adminconsent?client_id=XXX 这允许我使用管理员登录并发现tenant_id。如果接受,调用将返回查询参数 admin_co

  • 我们在Azure AD中有一个多租户注册的应用程序,让我们称其为租户a,我们正在尝试通过图形API在没有用户的情况下访问资源。使用以下详细信息,如果我们尝试使用资源,例如在主租户(租户a)上创建文件或文件夹,我们成功获得令牌。但是,如果我们为另一个租户运行相同的代码,例如租户B(它是租户A的租户之一),我们会得到错误:“AccessDenied:令牌中需要存在scp或roles声明。”事实上,令牌

  • 我正在使用微软图形SDK为我的应用程序(不是用户)获取访问令牌,以便从共享点读取。我一直在关注这个文档,并发布了这个SO问题。链接的SO中的代码是相同的。我能够添加应用程序权限以及在Azure门户中授予它们(通过按下按钮)。问题是,返回使用的令牌中不包含任何角色/scp声明。因此,当使用令牌时,我收到“令牌中需要存在scp或角色声明”消息。 可以肯定的是,在获取访问令牌时,我传递的范围的唯一值是: