Я пытаюсь переместить файлы между фабрикой данных Azure и SharePoint Online.
У меня есть несколько файлов тестовых данных в расположении SharePoint, и у меня есть конвейер в фабрике данных, содержащий действие в Интернете и действие копирования данных. Затем действие копирования связывается с озером данных как его приемником.
Мой желаемый результат - предоставить действию копирования данных доступ к SharePoint Online API, а затем перейти к перемещению извлеченных данных в озеро данных. В настоящее время у него есть токен-носитель, но он не может получить доступ к данным через SharePoint Online API.
Я следил за руководством Microsoft здесь, включая предпосылки.
В фабрике данных появляется следующая ошибка: 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, успешно используя идентификатор приложения, ключ и идентификатор клиента для доступа к токену носителя.
Я успешно предоставил SharePoint online полный доступ к зарегистрированному сервисному приложению, поскольку я вижу его в списке доверенных приложений в SharePoint. Я сделал так не только здесь:
https://my_company.sharepoint.com/_layouts/15/appinv.aspx
, но и здесьhttps://my_company.sharepoint.com/sites/folder/_layouts/15/appinv.aspx
Я предоставил полные разрешения API для SharePoint и Microsoft Graph в зарегистрированном приложении-службе.
Я воспроизвел процесс в Postman. Только для того, чтобы получить те же результаты - я получаю токен-носитель, а затем получаю ошибку 401 при попытке вызвать GET-запрос для файлов с использованием токена-носителя. Ошибка в Postman:
{"error_description":"Exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException' was thrown."}
Я читал, что альтернативная связанная служба OData в фабрике данных невозможна с использованием базовой аутентификации здесь. Итак, я попробовал в этой статье с использованием субъекта-службы AAD с сертификатом, но возникли дополнительные проблемы при попытке создать сертификат. Возможно, это мой лучший выбор.
Самые актуальные сообщения, которые я использовал:
Как переместить список точек доступа или файл Excel перейти на 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/