2018年4月4日,星期三

控制Office 365组的创建–一个简单的无代码解决方案

在Microsoft的全球视野中,使用Office 365的组织中的每个用户都应该能够创建组–并且请记住,可以从Outlook,Microsoft Teams,Planner,Power BI,SharePoint等创建它们。但是,在现实世界中,似乎很少有大型企业愿意这样做。我个人’我并不惊讶。我认为引入更多治理的原因很多–也许您想收集一些有关请求者/组/业务部门/部门的元数据,或者您只想让管理员检查这是一个真实/合理的请求。或者,也许您想检查一个SharePoint网站是否已经存在,因为您’会做一些不同的事情(例如“Groupify”该网站)。当然啦’使用可以将组创建锁定到中央管理团队"GroupCreationAllowedGroupId" approach (see 管理谁可以创建Office 365组)-但是,除非对此进行其他补充(例如,当用户需要新组时,他们提出了支持要求),否则您就不会真正面向用户“request process”.

那么,如果我们可以基于一个简单的SharePoint列表(可以为用户指向)使用Office 365中的开箱即用的东西,就可以拥有一个非常简单的无代码解决方案,那么Microsoft Flow提供了批准步骤来获取我们需要控制吗?

Of course, 您 威力 not care too much about the concept of Office 365 Groups itself. But 您 威力 关心为企业提供Microsoft Teams或SharePoint网站,还是在Groups之上构建的其他功能更强大的功能之一。当Office 365允许团队与组一起提供时,此处概述的解决方案可能会变得更加有价值。– we’目前正在等待与此相关的API,但是’即将推出。因此,可以将此处概述的解决方案视为将来的Teams调配解决方案,而不仅仅是当前的Groups调配解决方案。

在实施方面,我’我们看到许多文章显示了在Office 365中预配置组和网站的方式略有不同,但是几乎所有文章都使用了一些自定义代码,例如Azure函数。更好的之一是 马丁娜·格罗姆(Martina Grom)’s系列从这里开始,但我想知道是否有更简单的方法。 Azure函数当然很棒(我’即将在德国举行的2018年欧洲合作峰会上发表演讲)–但是除非组织已经使用Azure进行代码托管,否则它将 能够 引入一些障碍。这是因为突然需要Azure订阅,有人要询问预测成本(即使我们的开发人员知道他们的消费计划很低),有人需要注销等等。或者,由于其他原因,您可能更喜欢无代码解决方案。所以..

使用SharePoint列表,流和图实施受控的组配置

该解决方案的成分是:

  • SharePoint列表
  • 流(仅需执行几个操作)
  • Azure AD应用程序注册(允许调用图)

是的,我们确实需要在Azure中做某事。我们需要注册一个应用程序并授予其创建组并将其添加用户的权限。但是你不’不需要任何付费Azure,因为Azure Active Directory与Office 365捆绑在一起,而您’只需在那里注册一个应用程序,以便您的Flow可以调用Graph。正如我们之前所说,’没有代码在任何地方运行–因此没有Azure函数,队列,数据库,存储或类似的东西。

我们完成的流程如下所示:

组创建流程

如您所见,除了简单地创建Group之外,还有很多其他功能,我认为您在现实世界中会想要:

  • 组被添加到一个单独的“Created Groups” list – otherwise, our ‘requests’ list wouldn’不能帮助我们了解是否有任何组实际上没有创建和创建’t exist. In the 建立的群组 list, we add the 组号 (which 威力 be useful to administrators), and 您 could easily extend this to add other data
  • 我们添加了要求该小组成为小组所有者的人 –否则,他/她不会’没有许可!这是一个陷阱,因为您’d都需要I.T.为每个步骤执行一个手动步骤(这违背了自动组配置系统的目的)。
    • N.B.在Flow中,这有些复杂,并且’流程的后续步骤都是关于什么的–解析一些JSON以获取创建的Group和请求该Group的用户的ID,然后对Graph进行单独调用以将该用户添加为Group owner。但是,它*可以*无需代码即可完成。
审批步骤

注意– one thing I’m在我的流程中/本文中的详细信息中未包括的是可以使您控制的实际批准步骤。这是实施者的练习,因为它’在Flow和所有人中实现微不足道’的要求可能有所不同(例如,一级/二级批准,不同的接收者等)。通常使用“Start an approval” step in Flow.

钥匙–用Flow调用图’s HTTP action

正如我所展示的 5 ideas for using Flow in 您r applications,’通过让Flow调用Microsoft Graph,可以轻松地创建Office 365组(或在Office 365中围绕用户,邮件,日历,文件等做很多事情)。对于许多开发人员来说,这比代码简单,因为获取身份验证令牌没有任何复杂性(具体取决于您从何处调用)。 Flow中简单的HTTP操作可用于此目的:

SNAGHTML61e70c

之所以可行,是因为它可以向指定的端点提供身份验证详细信息–确切地说,我们使用AAD应用程序注册中的客户ID和客户密码。这是通过Graph进行身份验证的一种方法(称为OAuth“Client Credentials”授予),它本身可以通过代码,Flow或可以通过HTTP调用的其他任何方式工作。配置步骤很简单。但是让’从SharePoint列表开始。

第1步– create a SharePoint list for Group 要求

所有的’这里需要一个简单的列表,供用户在需要团队新工作区时访问。为以下项添加列:

  • 组短名
  • 组显示名称
  • 团体简介

N.B. 您 could combine the ‘Title’具有组显示名称或类似名称的列表的字段 – I kept them separate (to perhaps use the 标题 for some other descriptive text), but up to 您. So my list looks like:

SNAGHTML2514c402

..然后表格如下所示:

SNAGHTML25cdc45c

可选的–创建第二个SharePoint列表,名称类似于“Created Groups”跟踪成功创建的组。我稍后提供的配置流程的步骤基于此方法–我只是添加一个字段“Group ID”,尽管您可以将其扩展为包括URL,所有者和其他有用的字段:

SNAGHTML3a4a197e

第2步–配置Azure AD应用程序注册

The other thing we need is an AAD app registration. 您’为此,需要具有Azure的权限,但以下屏幕将指导您完成操作:

SNAGHTML25d10dea

In the next screen, the sign-on URL 能够 be anything 您 like when being used with Flow –只需使用一些逻辑:

SNAGHTML25d1c718

然后进入“应用注册”设置,然后选择‘Required permissions’:

SNAGHTML25d30574

请点击‘Add’, and then select ‘Microsoft Graph’.

在出现的下一个屏幕中,找到‘申请许可’区域,然后在该部分中选择以下内容:

SNAGHTML25d5651e

请点击‘Done’ to complete.

您’还需要确保用户以许可的方式运行Flow。实际上,最简单的方法是向租户中的所有用户授予权限,因为可以使用“授予权限”按钮轻松完成此操作:

SNAGHTML3a32a299

否则,您需要编写一些使用此AAD注册并可以提示用户同意的代码(在以拥有Flow的用户身份登录的浏览器会话中)。在这种情况下,您可以合理地确定此应用程序所具有的权限不太深远,并且可以将同意应用于所有用户。 

第三步–实施流程

好,让’移至主要配置步骤– configuring the Flow. There are two ways 您 could do this:

  • 导入我的流程’m在下面的链接中提供,并重新配置了几件事
  • 自己创建流程,并配置相同的操作–如果您选择此路线,我会在下表中提供一些信息
选项1–导入我提供的流程:

您 能够 download my Flow from this link:

//github.com/chrisobriensp/COBGroupCreationFlow/blob/master/COBGroupCreationFlow.zip 

若要导入,请在应用启动器中找到“流程”图标,进入Office 365中的“流程”区域。进入该目录后,您应该看到一个导入选项:

SNAGHTML3a5a3c99

您’流导入后,需要执行以下操作:

  1. Define a new SharePoint connection (or use an existing one) so that the Flow 能够 connect to 您r SharePoint lists
  2. 编辑流程–覆盖以下设置:
    1. 编辑所有HTTP操作(绿色操作)– for each, enter 您的 AAD应用程序注册详细信息:
      1. 租户(也称为租户的目录ID AAD目录 您’re working with – 您 能够 get this from the Azure portal, in the “Properties” area for 您r Azure Active Directory)
      2. 客户编号
      3. 秘密
    2. 编辑“在“组请求”列表中创建项目时” action –为此,您需要选择“Group Requests”您之前创建的SharePoint列表。那里’在这里有点不明显– 您 need to select “Enter Custom Value”从下拉菜单中,然后将允许您在列表中的站点URL中键入/粘贴。完成此操作后,第二个下拉列表应显示该站点中的所有列表,您可以选择合适的列表
  3. 保存流程
  4. 测试!
选项2– create 您r own Flow, and configure the right actions:

如果您喜欢自己创建流程,则可以’我需要去“Group Requests”您首先创建的SharePoint列表。点击“Flows”按钮,然后创建一个新的流程。选择“添加项目时” option. Here’s是要添加到Flow中的操作的高级视图:

要添加的动作 目的/名称 Steps 您 need to take
HTTP 创建Office 365组(团队空间)

In this action, 您’重新向以下Graph端点发出POST请求:

//graph.microsoft.com/v1.0/groups 

参考 创建组文档 在图表中了解要传递的标题和正文。确保为mailNickname,displayName和Group描述的值添加变量。

Also specify details for 您r AAD app registration:

-租户ID

-客户编号

-秘密

解析JSON 解析JSON(创建的群组详细信息)

解析先前动作的响应主体- the purpose is to get the ID of the Group that was just created (so that we 能够 add a Group owner later, and also to log the 组号 to the “Created Groups” list).

将以下内容粘贴到‘Schema’ box:

{

"type": "object",

"properties": {

"id": {

"type": "string"

},

"description": {

"type": [

"string",

"null"

]

},

"displayName": {

"type": [

"string",

"null"

]

},

"groupTypes": {

"type": "array",

"items": {

"type": "string"

}

},

"mail": {

"type": "string"

},

"mailEnabled": {

"type": "boolean"

},

"mailNickname": {

"type": "string"

},

"securityEnabled": {

"type": "boolean"

}

}

}

SharePoint-将项目添加到列表 加 item to 建立的群组 list

将项目添加到其他列表(“Created Groups”)以记录创建该组。选择站点后,您应该能够选择列表和参考列。

从上一个变量中删除“parse JSON” action to obtain the 组号 and display name.

HTTP 获取用户

In this action 您’重新向以下Graph端点发出GET请求:

//graph.microsoft.com/v1.0/users/ [用户身份]

请参考“获取用户”文档以了解如何调用,但是由于不需要正文或标头,因此这一步骤更为简单。

确保在网址末尾添加UserID变量– 您’将需要用户的ID或UPN。如果您的电子邮件地址与UPN相同,则可以使用“Created by e-mail”流程中第一个操作的变量(将新项目添加到“Requested Groups” list).

Also specify details for 您r AAD app registration:

-租户ID

-客户编号

-秘密

解析JSON 解析JSON(群组请求者)

解析先前动作的响应主体- 目的是获取群组请求者的用户ID(在AAD中),以便我们可以将该用户添加为群组所有者。

将以下内容粘贴到‘Schema’ box:

{

"type": "object",

"properties": {

"businessPhones": {

"type": "array",

"items": {

"type": [

"string",

"null"

]

}

},

"userPrincipalName": {

"type": "string"

},

"id": {

"type": "string"

}

}

}      

HTTP 加 owner to created Group

In this action, 您’重新向以下Graph端点发出POST请求:

//graph.microsoft.com/v1.0/groups/[Group ID] /所有者/ $ ref

参考 加 Group Owner documentation in the Graph to understand the headers and body to pass. Note that 您 need the 组号 in the URL, and the User ID to be passed in the body of the request –适当地从早期动作中删除变量。

Also specify details for 您r AAD app registration:

-租户ID

-客户编号

-秘密

概要

通过对图的调用和解析返回的响应的正确组合,它可以’可以完全通过Flow创建新的Office 365组和(将发出请求的用户添加为所有者),而无需诸如Azure功能之类的自定义代码。以来 Flow对批准有很大的支持,’轻松添加所需的任何批准步骤即可获得适合您组织的控制权–批准者可以直接从收到的电子邮件,手机或平板电脑上的Flow应用程序或Flow批准中心批准/拒绝。也许我的一些东西 5 ideas for using Flow in 您r applications 文章也可能有助于您建立一个非常好的组配置过程–在某些情况下,您可能需要付出更多的努力(例如,制作自定义表单和用户体验),但是如果您想在更简单的方面做些事情,此处介绍的方法可能会有所帮助。并且,如果您确实需要一个更丰富的解决方案,则可以考虑将这种用于配置组的Flow / Graph方法作为更大机制中的核心机制。祝好运!