2019年一月30日星期三

使用C#Azure函数的SharePoint网站设计和PnP模板的端到端指南-第2部分

本文是我微型系列文章的续篇,该系列文章是使用网站设计和PnP模板为SharePoint网站或Microsoft Team创建自定义模板的。重点是使用C#函数,因为Microsoft的文档显示了PowerShell的使用,由于Azure Functions v2不支持PowerShell,因此将来不太可能选择使用PowerShell。在本系列中:

  1. 第1部分-Azure队列,应用程序注册,流程,网站设计和网站脚本
  2. 第2部分-Azure功能,密钥保管库,启用托管服务身份和PnP模板[本文]
配置Azure功能进行身份验证
因此,我们在上一篇文章中创建了Function应用程序,但是那里没有代码-我们仍然需要执行一些配置。它在2019年初仍在预览中,但是我选择使用Azure Key Vault和Azure Functions应用程序设置之间的集成来存储凭据(在这种情况下为应用程序ID和应用程序密钥)。这是将凭据存储在Key Vault中的事情,但是您无需编写任何特殊代码即可获取它们(或者实际上是修改已拥有的任何Azure Function代码)-而是在应用设置中使用令牌指向密钥库中的项目。见"应用程序设置的关键保管库参考" section of 使用Azure功能和App Service简化无服务器和Web应用程序的安全性。通常,与将凭据存储在“应用程序设置”中相比,这是处理凭据的一种更好的方法,因为您可以精确控制 WHO 可以访问他们 –就使用Azure和Azure中的THINGS的用户而言(例如特定的App Services或具有托管服务身份的其他任何内容)。

第1步– enable Managed Service 身分识别 for your Function app
  1. 在Azure门户中,转到“Platform features”功能应用程序区域,然后找到“Identity” item:
  2. 启用“system assigned” managed identity:
  3. 请点击“Save”然后确认出现的消息:
  4. 您的功能应用’的受管理身份现在将被注册:
第2步-将凭据添加到Key Vault并授予访问权限
I’我将略略浏览一下,但完整文档位于 //docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references 如果需要的话。
  1. 首先,将您的SharePoint应用程序注册的客户端ID和客户端密钥作为密钥添加到密钥库中。 (注:如果您不这样做’您的Azure订阅中已经没有Key Vault实例,您’需要创建一个)。选择您喜欢的任何名称,但我的看起来像这样:
  2.           
  3. 对于每一个,我都需要获取完整的标识符。通过单击每个秘密的当前版本来执行此操作’ve创建了它,并找到了“Secret Identifier” property:
  4. 复制这些URI值,就像我们’一会儿需要它们。
  5. 接下来,向您的Azure Function授予对这些机密的访问权限。仍在Key Vault区域中,进入“Access policies” area:
  6. 新增政策:
  7. 首先,选择主体–在这里,您正在按名称搜索Azure Function应用程序:

    然后:
     
  8. 请点击the “Select” button once you’ve found it.
  9. 现在我们修改“Secret permissions”:
  10. 检查 “Get” option:
  11. 最后,点击“OK”确认权限:
步骤3-添加应用设置以指向密钥保管库条目
在我的功能的应用程序设置中,我需要使用以下约定 @ Microsoft.KeyVault(SecretUri = secret_uri_with_version ) 指向我安全存储在Key Vault中的凭据。因此,在前面的步骤中获得了每个秘密的URI之后,我添加了类似的条目以及代码中使用的“应用设置”键名称。每一个的价值 secret_uri_with_version 是适当机密的URI:



Azure功能
最后一部分是Azure函数-核心代码如下,但是您也可以 从最后链接的Github项目下载完整项目 。 有关代码的一些注意事项:
  • 如前一篇文章所述,我们’重新使用SharePoint仅应用程序身份验证与SharePoint通讯-身份验证代码反映了这一点。如果您选择对证书使用仅AAD应用程序身份验证,则需要使用其他PnP AuthenticationManager方法
  • 我使用一个单独的类来略微抽象出Client ID和Client Secret,但这只是一个每个都有一个属性的类。随意创建一个,或者只使用局部变量
总体而言,这里没有什么太复杂的,但是我发现始终需要参考,以了解在Azure中运行所有内容时如何选择PnP模板文件的位置。代码中的路径与发布到Azure Function应用程序的Visual Studio项目中的内容一致:

PnP模板
为了完整起见,这里有一个简单的PnP模板来说明集成-它提供了一个现代的主页,其中包含特定的Web部件,内容类型和文档库,并在Web属性包中添加了一个条目:

结果

一切就绪后,您将为组织建立一个强大的自助团队或SharePoint网站配置流程-您可以在网站设计和PnP模板之间以几乎任何可能的方式配置网站。
要与Teams / Office 365组一起使用,您可以设置要应用于团队网站的默认网站设计,然后将调用您的模板。对于独立的SharePoint网站,用户可以从SharePoint主页请求一个新网站:

您的自定义网站设计将出现在列表中:

..然后收集该站点的详细信息:

一旦用户点击“Create site”按钮,将创建网站,并且Office 365将指示正在进行网站设计和相关的模板制作:




几秒钟后,该站点将可用,并且您的站点设计和PnP模板都将被应用。就我而言,我有:
  • 从我的网站设计中:
    • 内容类型,文档库和导航链接
    • 我的申请“COB purple” modern theme
  • 从我的PnP模板中:
    • 具有特定区域中特定Web部件的自定义现代主页
    • 应用于网站的区域设置
    • 另一个自定义文档库,很好
    • 行李袋入口
    • 请求访问权限设置已应用
It’看起来有点令人眼花water乱,但是’非常适合测试:)

概要

将PnP模板与SharePoint网站设计集成在一起的过程很少,但是它带来的强大功能是能够为Microsoft Teams和标准SharePoint模板化两个网站,这是一项重要技术。重要的是,使用PnP意味着您可以用站点设计当前无法实现的方式配置站点。希望本指南对理解机制有所帮助。如前所述,此处使用的所有文件都可以从以下位置下载:

//github.com/chrisobriensp/SiteDesignsAndPnPTemplating

没意见: