即使我授予访问权限,Graph API也会拒绝访问

时间:2018-03-07 02:42:42

标签: c# microsoft-graph

我遵循了ASP.NET Quick Start guide并让项目有效。

API成功检索我的电子邮件地址就好了。

现在我想获得一个用户列表并检索他们的一些属性。

GraphService

public async Task GetUsers(GraphServiceClient graphClient)
{
    var users = await graphClient.Users.Request().Select("mail").GetAsync();
}

我打电话(复制方法以检索用户电子邮件):

var graphClient = SDKHelper.GetAuthenticatedClient();

await graphService.GetUsers(graphClient);

但是我收到了错误

  

{代码:Authorization_RequestDeniedMessage:没有足够的权限来完成操作。内部错误}

即使我设置了这些privelages:

enter image description here

为什么这么难?我正在连接到API并获取我自己的电子邮件地址,但我无法做任何其他事情......

当我在图形浏览器中运行https://graph.microsoft.com/v1.0/users时,它会返回所有用户......

请有人帮忙

1 个答案:

答案 0 :(得分:1)

如果您指的是this sample application,那么我想提及获取访问令牌它利用ConfidentialClientApplication.AcquireTokenSilentAsync method作为第一个参数接受范围列表请求资源。这些范围(委派权限)在web.config文件中通过ida:GraphScopes密钥指定。换句话说,无论通过应用程序注册授予了什么权限,都将通过ida:GraphScopes密钥指定的每个范围请求访问令牌。

话虽如此,为了使这个要求有效:

public async Task<IGraphServiceUsersCollectionPage> GetUsers(GraphServiceClient graphClient)
{
   return await graphClient.Users.Request().Select("mail").GetAsync();
}

您可以在web.config中明确更新委派的权限:

<add key="ida:GraphScopes" value="User.Read User.ReadBasic.All"/>    

如何验证访问令牌

可以通过thisthis服务验证访问令牌的权限。解码后,委派的权限通过scp属性表示,例如:

scp: "Files.ReadWrite Mail.Send User.Read"