从应用程序授予对共享邮箱的访问权限

Grant Access to a Shared Mailbox From an Application

Within Office 365 its apparently not possible to assign a security group to a shared mailbox。这意味着需要手动将所有用户添加到共享邮箱,这是一个痛苦。

However, Microsoft Graph appears to offer a way to subscribe to changes to a given group。因此,我的想法是构建一个简单的 azure 函数应用程序,当从特定组中添加/删除某人时,该应用程序从 Microsoft Graph 接收 web-hook,并立即从共享邮箱列表中添加/删除用户。

我遇到的问题是 Microsoft Graph 似乎没有 API 请求授予用户访问共享邮箱的权限;而且我还没有找到另一个允许它的 Microsoft API。

The only way I've discovered that can even do this programmaticly is with PowerShell,这要求我创建一个用户进行身份验证而不是授予应用程序访问权限。 PowerShell 目前也仅对 Azure Functions 提供实验性支持,我什至不确定 Azure Functions 是否支持 Exchange Online PowerShell 调用或如何在需要时安装它。

有没有人知道使用 REST 调用或 JavaScript 具体执行此操作的方法,或者更好的方法是在不编写代码的情况下使用 Microsoft Flow 执行此操作?

如果我很快没有得到有关首选方法的任何答案,我将排除有关如何使用 Azure Function 或 Microsoft Flow 和 PowerShell 执行此操作的解决方案。

您可以使用 Azure 自动化来创建将执行您的 PowerShell 代码的 Azure Runbook,而不是 Azure 函数。

Runbook 允许您导入模块,为您提供执行 Exchange Online PowerShell 所需的所有功能。它还允许您存储具有正确权限级别的帐户的凭据。 (测试时您可以使用 Exchange 服务管理员帐户或全局管理员)。

因此您可以创建一个 Azure AD 用户,使用 Exchange RBAC 权限将其范围缩小到仅具有出于安全原因需要执行的操作的权限,然后将该用户的凭据存储在 Runbooks 凭据中功能。

然后 Runbook 可以是 executed from a webhook

小提示,不能添加安全组,但是可以添加启用邮件的安全组并赋予权限。该组可以从 Exchange 的全局地址列表中隐藏,只需在租户的 .onmicrosoft.com 域中使用一些虚假邮件地址即可。

唯一需要注意的是,这种使用组权限的方法确实为用户提供了正确的访问权限,但是,邮箱不会自动添加到 Outlook。 这样做的原因是 Exchange 向您授予邮箱访问权限的对象添加了一个自动映射标志。但是在组上设置此标志不会递归,并且还会在用户上添加标志,因此用户需要手动进入 Outlook 并告诉它打开邮箱。

如何在 Office 365 中手动测试
确认工作 03/12/2018

  1. 在 Office 365 中添加新的启用邮件的安全组。
  2. 正在 Office 365 中创建新的共享邮箱。
  3. 正在将用户添加到已启用邮件的安全组。
  4. 打开使用您添加到已启用邮件的安全组的用户登录的 OWA
  5. Select“打开另一个邮箱”并选择我的共享邮箱。

这是测试权限是否已转移的最简单方法。但请注意,在 Outlook 桌面版中,用户需要在设置页面中手动添加邮箱,因为自动映射标志不会保留。

还要注意 Exchange Online 复制时间。在最坏的情况下,所有内容可能需要长达 30 分钟才能正确传播,但通常会在 5 分钟内完成。