2

我在代码中使用 GraphServiceClient 来访问数据的多个端点。我有一个使用 Azure AD 登录的服务帐户,其范围如下:Group.Read.AllUser.Read.AllMail.Read

但是,使用这些所需的范围,我无法从用户那里获取用户个人资料或生日的 MailFolders 。它给出了以下错误:

ServiceException: Code: -2147024891, System.UnauthorizedAccessException.

Azure AD 中的委派权限已由管理员授予 ( https://imgur.com/iFb0rx9 )。

邮件文件夹示例:

var result = await client
  .Users[user.Id]
  .MailFolders
  .Request()
  .GetAsync();

这是返回的错误:

ServiceException: 
   Code: ErrorAccessDenied
   Message: Access is denied. Check credentials and try again.

我不能访问其他用户的个人资料还是我错过了其他东西?

4

2 回答 2

1

如果您拥有Mail.Read委派权限(意味着您已使用用户登录),那么您只能阅读自己的邮件,即使有人授予您对其邮箱的权限。为了阅读其他邮箱,您需要请求Mail.Read.Shared权限。

如果您具有Mail.Read应用程序权限(意味着没有登录用户到您的应用程序,使用客户端凭据流),那么您可以读取组织中的所有邮箱。

于 2019-06-21T13:23:12.860 回答
0

我相信这里已经回答了这个问题。如果您知道我的意思,即使您的应用程序已获得管理员同意执行某些操作,它也不会覆盖 Exchange 委托权限。

您将需要该特定用户的令牌或尝试以 Exchange Online 中委派的用户身份访问它。

于 2019-06-21T09:46:36.697 回答