如何将 SharePoint 访问令牌从逻辑应用传递到 HTTP 端点

How to pass SharePoint access token from logic app to HTTP endpoint

我有一个逻辑应用程序,它每 15 分钟触发一次我的 HTTP 端点。然后端点使用 Rest API 连接到 SharePoint 并从特定列表中获取数据,然后将其添加到我的数据库中。

但是要从 SharePoint 获取数据,我需要访问令牌。我是否需要编写逻辑来获取端点本身的访问令牌?或者在触发我的端点时是否可以从我的逻辑应用程序传递访问令牌?

作为第一个回答。是的,使用 SharePoint Online REST API 在 HTTP 端点中实现获取访问令牌的逻辑。 通过这样的引导可能1, 2, 3, 4。我认为不存在任何将访问令牌从 Azure 逻辑应用程序传递到端点的方法。

作为 second 回答我可以建议使用 SharePoint CSOM 对象模型。要使用它,只需在您的 HTTP 端点所在的计算机上安装 SharePoint Online Client Components SDK 并添加 Microsoft.SharePoint.Client.dll Microsoft.SharePoint.Client.Runtime.dll 库作为引用。存在良好的 SharepointOnlineCredentials class 可以为请求提供凭据。

或其他方式 - 您可以重新构建解决方案:

  1. 如果我理解正确,Azure 逻辑应用程序必须要求您通过开箱即用功能设置与 SharePoint 的连接。看到这个 article。我认为您可以通过 Azure 逻辑应用程序中的操作从 SharePoint 获取列表项,并将数据传递到您的 HTTP 端点,而无需任何额外的访问令牌请求,就像方法参数一样。
  2. 如果您可以从 SharePoint 访问 HTTP 端点,那么您可以将数据从 SharePoint 直接发送到您的端点,而不是从 Azure 逻辑应用程序。您可以从列表项表单页面、网站工作流或一些流程模板中完成。
  3. 如果您无权从 SharePoint 访问 HTTP 终结点,则可以创建 Azure 托管 Web 服务并通过任何方式从 SharePoint 调用其方法。此 Web 服务会将数据作为方法参数传递到您的 HTTP 端点,而无需任何额外的身份验证。 Web 服务调用将从 JavaScript 上的列表项表单保存,从 SharePoint 工作流完成。可能在这里获取此 Azure Web 服务的访问令牌比从 HTTP 端点到 SP 更容易。
  4. 您在使用 Azure SQL 数据库吗?如果是,则通过 Business Connectivity Services BCS 在 SharePoint Online 和 Azure SQL 数据库之间创建连接。喜欢here or here or here。这允许用户通过开箱即用的功能在 SharePoint 列表中内嵌地获取、创建和更新数据库中的项目。
  5. 定期创建 运行 代码(控制台应用程序、PowerShell 脚本、Windows 服务)。将其安排在您公司的某些服务器上。该代码将使用 CSOM SharePoint 对象模型并通过 SharepointOnlineCredentials class 更轻松地连接到 SharePoint,获取数据并直接连接到您的 HTTP 端点或连接到您的数据库。
  6. 如果您的数据库是位于本地的 MS SQL 服务器,那么您可以使用 this guide 在 SharePoint Online 和本地 SQL 服务器之间创建 Business Connectivity Services 内容类型。

你可以走一些奢侈的方式:=)

  1. SharePoint 通过某些方式可以将包含列表项数据的电子邮件发送到某个收件箱,您的 HTTP 端点可以获取这些电子邮件、解析数据并执行以下步骤。
  2. 也许您可以在某些公司的本地 MS SQL 服务器上创建 Sql 服务器集成服务 (SSIS) 包,该服务器会定期将数据从 SharePoint 直接发送到您的数据库或发送到您的 HTTP端点直接。
  3. 其他方式...

"But to get the data from SharePoint, i need access token. Do i need to write logic to get access token in the endpoint itself?"

正确,您确实需要不记名访问令牌。您在哪里托管 HTTP 端点的代码?如果您可以将它作为一个函数或 Web API 放在 Azure 中,那么您可以实现仅限应用程序的权限,这将为您提供必要的访问令牌。

这样做有 2 个选项:

  1. Granting access via Azure AD App-Only
  2. Granting access using SharePoint App-Only

第一个有点复杂,因为它需要客户端机密和自签名安全证书,但它会允许您访问任何 O365 API。第二个更简单,只需要 app/client ID 和密码,但只允许访问 SharePoint Rest API.

上面链接的 MSDN 文档使用 PowerShell 脚本生成安全证书,但我更喜欢 Bob German's instructions 手动 creating/exporting。他还在他的教程中包含有关为您的 Azure 功能注册 Azure AD 应用程序的说明。