Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这是为什么;“拒绝访问”;在与Microsoft Graph API通信时?_C#_Microsoft Graph Api - Fatal编程技术网

C# 这是为什么;“拒绝访问”;在与Microsoft Graph API通信时?

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

我无法访问Microsoft graph中的端点

我将上传一个文件到用户的一个驱动器,当我有通信设置 但现在我只是想得到一个驱动器中的项目列表

这是我从{{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"
  }
 }
}
我在端点上使用图形资源管理器检索了驱动器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