如何将 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 可以为请求提供凭据。
或其他方式 - 您可以重新构建解决方案:
- 如果我理解正确,Azure 逻辑应用程序必须要求您通过开箱即用功能设置与 SharePoint 的连接。看到这个 article。我认为您可以通过 Azure 逻辑应用程序中的操作从 SharePoint 获取列表项,并将数据传递到您的 HTTP 端点,而无需任何额外的访问令牌请求,就像方法参数一样。
- 如果您可以从 SharePoint 访问 HTTP 端点,那么您可以将数据从 SharePoint 直接发送到您的端点,而不是从 Azure 逻辑应用程序。您可以从列表项表单页面、网站工作流或一些流程模板中完成。
- 如果您无权从 SharePoint 访问 HTTP 终结点,则可以创建 Azure 托管 Web 服务并通过任何方式从 SharePoint 调用其方法。此 Web 服务会将数据作为方法参数传递到您的 HTTP 端点,而无需任何额外的身份验证。 Web 服务调用将从 JavaScript 上的列表项表单保存,从 SharePoint 工作流完成。可能在这里获取此 Azure Web 服务的访问令牌比从 HTTP 端点到 SP 更容易。
- 您在使用 Azure SQL 数据库吗?如果是,则通过 Business Connectivity Services BCS 在 SharePoint Online 和 Azure SQL 数据库之间创建连接。喜欢here or here or here。这允许用户通过开箱即用的功能在 SharePoint 列表中内嵌地获取、创建和更新数据库中的项目。
- 定期创建 运行 代码(控制台应用程序、PowerShell 脚本、Windows 服务)。将其安排在您公司的某些服务器上。该代码将使用 CSOM SharePoint 对象模型并通过 SharepointOnlineCredentials class 更轻松地连接到 SharePoint,获取数据并直接连接到您的 HTTP 端点或连接到您的数据库。
- 如果您的数据库是位于本地的 MS SQL 服务器,那么您可以使用 this guide 在 SharePoint Online 和本地 SQL 服务器之间创建 Business Connectivity Services 内容类型。
你可以走一些奢侈的方式:=)
- SharePoint 通过某些方式可以将包含列表项数据的电子邮件发送到某个收件箱,您的 HTTP 端点可以获取这些电子邮件、解析数据并执行以下步骤。
- 也许您可以在某些公司的本地 MS SQL 服务器上创建 Sql 服务器集成服务 (SSIS) 包,该服务器会定期将数据从 SharePoint 直接发送到您的数据库或发送到您的 HTTP端点直接。
- 其他方式...
"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 个选项:
第一个有点复杂,因为它需要客户端机密和自签名安全证书,但它会允许您访问任何 O365 API。第二个更简单,只需要 app/client ID 和密码,但只允许访问 SharePoint Rest API.
上面链接的 MSDN 文档使用 PowerShell 脚本生成安全证书,但我更喜欢 Bob German's instructions 手动 creating/exporting。他还在他的教程中包含有关为您的 Azure 功能注册 Azure AD 应用程序的说明。
我有一个逻辑应用程序,它每 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 可以为请求提供凭据。
或其他方式 - 您可以重新构建解决方案:
- 如果我理解正确,Azure 逻辑应用程序必须要求您通过开箱即用功能设置与 SharePoint 的连接。看到这个 article。我认为您可以通过 Azure 逻辑应用程序中的操作从 SharePoint 获取列表项,并将数据传递到您的 HTTP 端点,而无需任何额外的访问令牌请求,就像方法参数一样。
- 如果您可以从 SharePoint 访问 HTTP 端点,那么您可以将数据从 SharePoint 直接发送到您的端点,而不是从 Azure 逻辑应用程序。您可以从列表项表单页面、网站工作流或一些流程模板中完成。
- 如果您无权从 SharePoint 访问 HTTP 终结点,则可以创建 Azure 托管 Web 服务并通过任何方式从 SharePoint 调用其方法。此 Web 服务会将数据作为方法参数传递到您的 HTTP 端点,而无需任何额外的身份验证。 Web 服务调用将从 JavaScript 上的列表项表单保存,从 SharePoint 工作流完成。可能在这里获取此 Azure Web 服务的访问令牌比从 HTTP 端点到 SP 更容易。
- 您在使用 Azure SQL 数据库吗?如果是,则通过 Business Connectivity Services BCS 在 SharePoint Online 和 Azure SQL 数据库之间创建连接。喜欢here or here or here。这允许用户通过开箱即用的功能在 SharePoint 列表中内嵌地获取、创建和更新数据库中的项目。
- 定期创建 运行 代码(控制台应用程序、PowerShell 脚本、Windows 服务)。将其安排在您公司的某些服务器上。该代码将使用 CSOM SharePoint 对象模型并通过 SharepointOnlineCredentials class 更轻松地连接到 SharePoint,获取数据并直接连接到您的 HTTP 端点或连接到您的数据库。
- 如果您的数据库是位于本地的 MS SQL 服务器,那么您可以使用 this guide 在 SharePoint Online 和本地 SQL 服务器之间创建 Business Connectivity Services 内容类型。
你可以走一些奢侈的方式:=)
- SharePoint 通过某些方式可以将包含列表项数据的电子邮件发送到某个收件箱,您的 HTTP 端点可以获取这些电子邮件、解析数据并执行以下步骤。
- 也许您可以在某些公司的本地 MS SQL 服务器上创建 Sql 服务器集成服务 (SSIS) 包,该服务器会定期将数据从 SharePoint 直接发送到您的数据库或发送到您的 HTTP端点直接。
- 其他方式...
"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 个选项:
第一个有点复杂,因为它需要客户端机密和自签名安全证书,但它会允许您访问任何 O365 API。第二个更简单,只需要 app/client ID 和密码,但只允许访问 SharePoint Rest API.
上面链接的 MSDN 文档使用 PowerShell 脚本生成安全证书,但我更喜欢 Bob German's instructions 手动 creating/exporting。他还在他的教程中包含有关为您的 Azure 功能注册 Azure AD 应用程序的说明。