在 SharePoint 在线 API 上调用 GET 请求时出现 Azure 数据工厂 401 错误

问题描述

我正在尝试在 Azure 数据工厂和 SharePoint Online 之间移动文件

我在 SharePoint 位置有一些测试数据文件,我在数据工厂中有一个管道,其中包含一个 Web 活动和一个复制数据活动。然后,复制活动链接到作为其接收器的数据湖。

期望的结果是授予复制数据活动访问 SharePoint Online API 的权限,然后继续将检索到的数据移动到数据湖中。按照原样,它具有不记名令牌,但无法通过 SharePoint Online API 访问数据。

我已遵循 Microsoft 指南 here包括先决条件。

我在数据工厂中收到以下错误Error code 2200 "Failure happened on 'Sink' side. ErrorCode=UserErrorInvalidCredentialToReadHttpFile,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The credential to read http file is invalid.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Net.WebException,Message=The Remote Server returned an error: (401) Unauthorized.,Source=System,

错误出现在复制数据活动(使用 HTTP 链接服务)上,不是网络活动。因此,我成功地获得了传递给复制数据活动的不记名令牌,但被拒绝了。

疑难解答:

  • 我已为数据分配了对数据工厂的所有者角色访问权限 湖。

  • 我已经按照先决条件注册了服务主体应用程序 在上面的 Microsoft 指南中,成功使用应用程序 ID, 用于访问不记名令牌的密钥和租户 ID

  • 我已授予 SharePoint Online 完全 访问已注册的 服务应用程序成功,因为我可以看到它列在 SharePoint 中的受信任应用程序中。我没有 只有在这里https://my_company.sharepoint.com/_layouts/15/appinv.aspx在这里 https://my_company.sharepoint.com/sites/folder/_layouts/15/appinv.aspx

  • 我已授予 SharePoint 和 Microsoft Graph 的完整 API 权限 在注册的服务应用中。

  • 我已经在 Postman 中复制了这个过程。只为拥有一样 结果 - 我检索了一个不记名令牌,然后在以下情况下收到 401 错误 尝试使用不记名令牌调用文件的 GET 请求。 Postman 中的错误是:{"error_description":"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."}

我了解到,在此处使用基本身份验证无法使用数据工厂中的替代 OData 链接服务。所以我尝试了 this article 使用带有证书的 AAD 服务主体,但在尝试生成证书时遇到了进一步的问题。也许这是我最好的选择。

我使用过的最相关的帖子:

How to move sharepoint list or excel file to azure sql dw?

https://docs.microsoft.com/en-us/answers/questions/109275/copy-file-from-sharepoint-not-working.html

http://www.ktskumar.com/2017/01/access-sharepoint-online-using-postman/

Azure Data Factory and SharePoint

解决方法

所以我找到了我的问题的解决方案。使用 Azure 逻辑应用将文件从 SharePoint Online 移动到 Azure 存储。

这比使用数据工厂要容易得多,我希望有人早点告诉我。

找到参考here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...