我无法访问Microsoft图中的端点。
当我设置通信时,我将把文件上传到用户一个驱动器 但现在我只是想获取驱动器中的项目列表。
这是我从 https://graph.microsoft.com/v1.0/drives/{{drive_id}}/root/children得到的回应
{
"error": {
"code": "AccessDenied",
"message": "Either scp or roles claim need to be present in the token.",
"innerError": {
"request-id": "123",
"date": "2020-01-09T11:43:20"
}
}
}
我通过在终结点 https://graph.microsoft.com/v1.0/me/上使用图形资源管理器检索了drive_id 在登录用户上。
应该注意的是,我可以使用此端点 https://graph.microsoft.com/v1.0/subscriptions 因此,我必须对访问令牌做正确的事情。
我按照本教程使用客户端凭据流获取访问令牌。
这是我用来获取访问令牌的代码
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-
form-urlencoded"));
var req = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/<tenant>/oauth2/token");
req.Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{"grant_type", "client_credentials"},
{"client_id", "123"},
{"client_secret", "123"},
{"resource", "https://graph.microsoft.com"}
});
当我解码 JWT 时,我在令牌中看不到任何范围,但如果我理解正确 标头应获取管理员允许的范围。
管理员已向我的应用授予了图形资源管理器的以下权限: (虽然我没有代理权限,但这重要吗?
Filse.Read,
Files.ReadWriteAll,
Sites.ReadWtiteAll,
User.Read
我正在邮递员中使用此集合进行测试。
提前感谢任何建议。
来自Marc LaFleurs的回答:
首先要了解的是,您不能在同一令牌中同时接收应用程序和委派权限,这是非此即彼的情况。您收到的类型完全取决于您用于请求令牌的 OAuth 授权:
授权代码和隐式返回 具有 scp 属性的委托令牌 客户端凭据返回具有角色属性的应用程序令牌 第二件事是,你已请求将范围限定为两个不同的 API。根据您选择的内容,您将无法通过Microsoft Graph访问SharePoint,因为您只请求访问旧版SharePoint API。更重要的是,你只请求了 Graph 的委派用户.读取范围,因此当你使用客户端凭据获取令牌时,该令牌将没有任何权限。
若要获取用于读取 SharePoint 网站的应用程序令牌,需要选择"网站.读取.全部"Microsoft"图形应用程序"权限。