我正在尝试到达端点
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.Shared
或Mail.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
参数将接受:
- 名称/gh>
- 专有名称(DN)
- 显示名称 <
- 电子邮件地址/gh>
- GUID
如果您只有几个地址,您可以选择为每个电子邮件地址创建一个单独的applicationaccessppolicy。
最后我不认为你的图形API URI是正确的。
如果您想访问Tests@acme.com的收件箱,那么试试这个:
https://graph.microsoft.com/v1.0/users/Tests@acme.com/mailFolders/Inbox
请参考此处的mailFolder资源类型。