问题描述
我正在尝试在 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