错误当尝试使用图形Api获取邮件文件夹时拒绝访问?



我正在尝试到达端点

https://graph.microsoft.com/v1.0/users/{emailaddress}/mailFolders('InBox') but am receiving 

Error Access Denied response.

我已经授予了Mail.Read.Shared和Mail.ReadWrite.Shared的委派权限。

我的情况是,在Azure AD中有许多用户,Manager@acme.com和Tests@acme.com,因此它们存在于相同的租户/组织下。

我有一个应用程序,其中我登录为Manager@acme.com作为当前用户。我使用客户端id, secret等创建一个连接到应用程序,并接收一个验证值n用于我的api调用。

但是当我试着打电话给

https://graph.microsoft.com/v1.0/users/Tests@acme.com/mailFolders('InBox') with that token I 

得到以下错误:

{
"error": {
"code": "ErrorAccessDenied",
"message": "Access is denied. Check credentials and try again."
}

}

是否需要在应用级别同时授予Mail.Read.Shared和Mail.ReadWrite.Shared ?或者我需要在Outlook中创建一个共享文件夹吗?

我不认为Mail.Read.SharedMail.ReadWrite.Shared存在可分配的应用程序权限。

你的应用程序注册应该需要的唯一权限是Mail.Read,除非你打算使用图形删除/发送电子邮件等。

您可能还需要applicationaccesspicy。您可以在Exchange在线管理中心或通过PowerShell创建一个。我建议你为你需要访问的所有地址创建一个邮件启用安全组,并通过该策略授予对应用程序的受限访问权限。

我更喜欢PowerShell,所以在这种情况下,你需要ExchangePowerShell模块,并连接到Exchange Online。您需要一些Exchange管理员角色才能做到这一点。

那么,让我们假设您已经创建了一个启用邮件的安全组GraphAccessibleUsers@acme.com。您可以设置属性来对GAL隐藏此内容,以便用户无法看到它。

然后创建一个策略,如下所示:

New-ApplicationAccessPolicy -AccessRight RestrictAccess -AppId "<Your-App-Registration-Id" -PolicyScopeGroupId GraphAccessibleUsers@acme.com -Description "Allow App access to users in GraphAccessibleUsers@acme.com"

-PolicyScopeId参数将接受:

<
  1. 名称/gh>
  2. 专有名称(DN)
  3. 显示名称
  4. <
  5. 电子邮件地址/gh>
  6. GUID

如果您只有几个地址,您可以选择为每个电子邮件地址创建一个单独的applicationaccessppolicy。

最后我不认为你的图形API URI是正确的。

如果您想访问Tests@acme.com的收件箱,那么试试这个:

https://graph.microsoft.com/v1.0/users/Tests@acme.com/mailFolders/Inbox

请参考此处的mailFolder资源类型。

最新更新