C# 这是为什么;“拒绝访问”;在与Microsoft Graph API通信时?
我无法访问Microsoft graph中的端点 我将上传一个文件到用户的一个驱动器,当我有通信设置 但现在我只是想得到一个驱动器中的项目列表 这是我从{{drive_id}}/root/children得到的响应C# 这是为什么;“拒绝访问”;在与Microsoft Graph API通信时?,c#,microsoft-graph-api,C#,Microsoft Graph Api,我无法访问Microsoft graph中的端点 我将上传一个文件到用户的一个驱动器,当我有通信设置 但现在我只是想得到一个驱动器中的项目列表 这是我从{{drive_id}}/root/children得到的响应 { "error": { "code": "AccessDenied", "message": "Either scp or roles claim need to be present in the token.", "innerError": { "reque
{
"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"
}
}
}
我在端点上使用图形资源管理器检索了驱动器id
在已登录用户上
应该注意的是,我可以使用这个端点
所以我必须正确使用访问令牌
我按照教程使用客户端凭据流获取访问令牌
这是我用来获取访问令牌的代码
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"}
});
我正在使用《邮递员》中的集合进行测试
提前感谢您的建议,我们将不胜感激。来自Marc LaFleurs的回答: 首先要了解的是,您不能在同一令牌中同时接收应用程序和委派的权限,这是一个非此即彼的场景。您收到的类型完全取决于您用于请求令牌的OAuth授权: 具有scp属性的授权代码和隐式返回委托令牌 客户端凭据返回具有角色属性的应用程序令牌 第二件事是,您已经向两个不同的API请求了作用域。根据所选内容,您将无法通过Microsoft Graph访问SharePoint,因为您只请求访问旧版SharePoint API。更重要的是,您只请求了委派的User.Read scope for Graph,因此当您使用客户端凭据获取令牌时,该令牌将没有任何权限
为了获取用于读取SharePoint网站的应用程序令牌,您需要选择sites.Read.All。这是否回答了您的问题?这个问题已经提得够多了,我不久前写了一些细节。这也可能有帮助:
Filse.Read,
Files.ReadWriteAll,
Sites.ReadWtiteAll,
User.Read