首页 > 解决方案 > 通过 Flow/Azure 为外部用户自动访问 SharePoint Online

问题描述

我对 SharePoint/Azure/PowerShell 很陌生,如果我问的是一个愚蠢的问题,我深表歉意!

我们目前在我们的 O365 租户上托管了客户端 SharePoint 网站,可以访问每个网站,很快就会向我们各自的每个客户推出。最初,只有每个客户的高级管理人员才能访问这些站点,但是随着时间的推移,我们很可能也会添加其他所有人;为了简化新用户流程并使我们不必添加每个单独的员工,我们一直在考虑使用 Flow 来自动化用户访问,目标是添加经过身份验证的外部用户,而不需要管理员的太多实际输入,而不是一个简单的批准/拒绝过程。

总体规划如下:

视觉大纲<
在此处输入图像描述

  1. 每个客户站点都有一个名为“员工访问列表”的 SharePoint 自定义列表。所述列表将具有以下列:请求 ID(文本)、名字(文本)、姓氏(文本)、职位(文本)、公司(文本)、联系电话(文本)、电子邮件(文本)、 SharePoint 访问(是/否布尔值)。
  2. 如果某位员工需要访问 SharePoint 站点,那么他们各自的经理将把该员工添加到列表中并填写上述所有字段,将“SharePoint 访问”项的值设置为“是”。
  3. 这将触发流程并将一封批准电子邮件发送给我自己和另一位管理员,其中详细说明了要创建的用户以及提交请求的用户。
  4. 以某种方式插入脚本 - 如果请求被批准,这将运行,并为用户设置访问权限。
  5. 电子邮件通知会自动发送给 SharePoint 列表项的创建者,通知他们用户现在可以访问。

第 4 步是如果请求获得批准,我有点不知道该怎么做 - 我在下面编写了一个小 PowerShell 脚本,它几乎实现了我的目标,因为它创建了一个外部用户 PnP 组和 PnP 角色定义(如果还没有),提取“员工访问”列表上的“电子邮件”字段中的内容并运行 Add-PnPUsertoGroup 将用户拉到 PnP 组,然后发送用户一封电子邮件,其中包含指向 SharePoint 网站的链接,允许他们访问它。然而:

PowerShell脚本如下:

在此处输入图像描述

希望这一切都有意义 - 任何指导将不胜感激。

谢谢!

编辑:就像一些额外的信息一样,这里是当前的流程:

流程第 1 部分

流程第 2 部分

流程第 3 部分

标签: powershellsharepointazure-functionsazure-automationpower-automate

解决方案


此后找到了上述问题的答案 - 虽然 Azure Functions/Automation 是一个选项,但您不一定需要它们或从 Flow 运行的 PowerShell 脚本,在这种情况下,我的目标场景是使用 MS Graph Invitation API、App Permissions 和改为 HTTP SharePoint 调用。

请参阅随附的屏幕截图:

流程答案 1

流答案 2

流答案 3

第 1 步:设置一个有权调用 MS Graph 的应用程序 - 使用本指南获取有关如何执行此操作的帮助 - http://blogopaxio.azurewebsites.net/accessing-graph-api-from-microsoft-flow-using -application-permissions-2/

第 2 步:将 HTTP 添加到 MS Graph 并按照本文的屏幕截图 1 设置参数 - 此操作将创建访客用户和用户登录网站所需的邀请 URL。

第 3 步:此时,运行流程,以便我们可以从 HTTP 步骤的输出正文中获取“inviteRedeemURL” - 您需要将此特定 URL 在您的电子邮件中单独发送给最终用户。

第 4 步:暂停一两分钟,以确保来自先前操作的信息“有效” - 如果一切正常,此时,用户实际上将创建他们的访客帐户,您将能够在您的 O365 管理中心的用户下看到他们,但是他们不会知道他们的帐户访问权限(我们将在最后的电子邮件中通知他们)。

第 5 步:使用“向 SharePoint 发送 HTTP 请求”操作将用户添加到 SharePoint 安全组。请注意,此操作的 URI 中的“sitegroups(19)”指的是您将其放入的 PnP 组的 ID 号,因此在我的情况下,组 ID 为 19。如果您不确定 ID使用 PnP 命令通过 PowerShell 连接到您的 SharePoint 站点,然后运行 ​​Get-PnPGroup。

第 6 步:使用 Outlook 发送电子邮件操作向受邀用户发送电子邮件 - 仅供参考 - 我的屏幕截图中的“SharePoint 站点”变量实际上是“inviteRedeemURL”。

希望这可以帮助其他不确定如何执行此操作的人。如果有人有更好的解决方案可以通过各种方式实现这一目标,请发布!

谢谢!


推荐阅读