javascript - 从应用程序授予对共享邮箱的访问权限
问题描述
在 Office 365 中,显然不可能将安全组分配给共享邮箱。这意味着所有用户都需要手动添加到共享邮箱,这很痛苦。
但是,Microsoft Graph 似乎提供了一种订阅给定组更改的方法。因此,我的想法是构建一个简单的 azure 函数应用程序,当某人从特定组中添加/删除时,它接收来自 Microsoft Graph 的 web-hook,并立即从共享邮箱列表中添加/删除用户。
我遇到的问题是 Microsoft Graph 似乎没有用于授予用户访问共享邮箱的 API 调用;而且我还没有找到另一个允许它的 Microsoft API。
我发现甚至可以以编程方式执行此操作的唯一方法是使用 PowerShell,它要求我创建一个用户来进行身份验证而不是授予应用程序访问权限。PowerShell 目前也仅对 Azure Functions 提供实验性支持,我什至不确定 Azure Functions 是否支持 Exchange Online PowerShell 调用,或者如果需要如何安装它。
有谁知道专门使用 REST 调用或 JavaScript 执行此操作的方法,或者更好地使用 Microsoft Flow 来执行此操作而无需编写代码?
如果我没有很快得到有关首选方法的任何答案,我将提供有关如何使用 Azure 函数或 Microsoft Flow 和 PowerShell 执行此操作的解决方案。
解决方案
您可以使用 Azure 自动化来创建将执行 PowerShell 代码的 Azure Runbook,而不是 Azure 函数。
Runbooks 允许您导入模块,为您提供执行 Exchange Online PowerShell 所需的所有功能。它还允许您存储具有正确权限级别的帐户凭据。(在测试时,您可以使用 Exchange 服务管理员帐户或全局管理员)。
因此,您可以创建一个 Azure AD 用户,使用Exchange RBAC权限将其范围缩小到仅具有出于安全原因需要执行的操作的权限,然后将该用户的凭据存储在 Runbooks 凭据功能中。
然后可以从 webhook 执行Runbook 。
一个小提示,您不能添加安全组,但您可以添加启用邮件的安全组并赋予其权限。该组可以从 Exchange 的全局地址列表中隐藏,并且只使用租户的 .onmicrosoft.com 域上的一些虚假邮件地址。
唯一需要注意的是,这种使用组获取权限的方法确实为用户提供了正确的访问权限,但是邮箱不会自动添加到 Outlook。这样做的原因是 Exchange 向您授予邮箱访问权限的对象添加了一个自动映射标志。但是在组上设置此标志不会递归并且还会在用户上添加标志,因此用户需要手动进入 Outlook 并告诉它打开邮箱。
如何在 Office 365 中手动测试
确认工作 03/12/2018
- 在 Office 365 中添加新的启用邮件的安全组。
- 在 Office 365 中创建新的共享邮箱。
- 将用户添加到启用邮件的安全组。
- 打开使用您添加到启用邮件的安全组的用户登录的 OWA
- 选择“打开另一个邮箱”并选择我的共享邮箱。
这是测试权限是否已延续的最简单方法。但请注意,在 Outlook 桌面版中,用户需要在设置页面中手动添加邮箱,因为自动映射标志不会保留。
还要注意 Exchange Online 复制时间。在最坏的情况下,一切都可能需要长达 30 分钟才能正常传播,但它通常会在 5 分钟内工作。
推荐阅读
- javascript - 需要帮助调试此代码。它只返回未定义的普通字符串。我究竟做错了什么?
- sql - 使用条件聚合连接 3 个表
- windows - 如何在 scrnsave.scr 的后台启动 exe?
- reactjs - Chrome 扩展类型错误:未捕获的类型错误,无法读取未定义的属性“绑定”
- python - 在字典值的条件之后重新排序或重新创建字典键 -
- java - 如何为 JLabel 中最长的单词着色?
- xml - XML 和 XSL [我在 xsl 样式表中有一个 img src 属性,我想将它分配给同一样式表中的 xsl:variable]
- html - macOS 上的 Firefox 中未使用指定字体
- c# - MSAL .AcquireTokenByUsernamePassword 抛出 MSAL.Xamarin.iOS.4.27.0.0.MsalClientException: ErrorCode: parsing_wstrust_response_failed
- ios - UILabel 不显示整个文本