Как использовать API-интерфейс sharepoint для поиска в Интернете только для приложений

Я пытаюсь использовать API-интерфейс поиска sharepoint (/_api/search) из приложения. Добавляя его с портала Azure, я вижу, что поиск выполняется только в разделе "делегированные разрешения". Когда я запустил его в тестировании с логином пользователя и одобрил его, он работал хорошо. Так как я не хочу, чтобы пользователь входил в систему, я нашел эту статью

https://blogs.msdn.microsoft.com/vesku/2016/03/07/using-add-in-only-app-only-permissions-with-search-queries-in-sharepoint-online/

Это заставило меня поверить, что можно будет использовать поиск только в качестве приложения, а не в качестве пользователя. Я выполнил все шаги, создал приложение через appregnew.aspx, я также добавил другое разрешение через appin v.aspx, поэтому я запросил следующие разрешения:

<AppPermissionRequests AllowAppOnlyPolicy="true">
    <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
    <AppPermissionRequest Scope="http://sharepoint/search" Right="QueryAsUserIgnoreAppPrincipal" />
</AppPermissionRequests>

Я тестирую с использованием ADAL JAVA SDK следующим образом:

Future<AuthenticationResult> future = context.acquireToken(
                resource, new ClientCredential(clientId,
                        clientSecret), null);

где ресурс - xxxxxx.sharepoint.com, и я позже использую этот токен в качестве токена на предъявителя.

Но когда я пытаюсь проверить это, я получаю следующую ошибку:

2018-08-05 11:03:22 WARN ODataUtils: 120 - Не удалось получить успешный ответ для uri [ https://xxxxxx.sharepoint.com/_api/search], причина [{"error_description":"Сервер был невозможно обработать запрос из-за внутренней ошибки. Для получения дополнительной информации об ошибке либо включите IncludeExceptionDetailInFaults (либо из ServiceBehaviorAttribute, либо из поведения конфигурации) на сервере, чтобы отправить информацию об исключении обратно клиенту, либо включите отслеживание в соответствии с документацией Microsoft .NET Framework SDK и проверка журналов трассировки сервера."}];

Так как это sharepoint online, у меня нет сервера, и я не использую.NET Framework, так как же я должен отладить это? или другая идея что я тут не так делаю?

Любая помощь будет принята с благодарностью.

1 ответ

Возможно, вы можете использовать Java для вызова SharePoint Search Api и показать результат (но нам нужно потратить много времени, чтобы исследовать это, есть много неопределенностей.)

Лучший выбор для вас - использовать VisualStudio для тестирования надстройки SharePoint. Microsoft предоставляет больше поддержки, и вы можете использовать готовый шаблон.

Вы можете использовать широкий спектр API-интерфейсов для поиска, которые SharePoint предлагает для надстроек поиска:
Клиентская объектная модель.NET (CSOM) Ключевые библиотеки: Microsoft.SharePoint.Client.Search.dll ; Silverlight CSOM Ключевые библиотеки: Microsoft.SharePoint.Client.Search.Silverlight.dll ; Ключ объектной модели ECMAScript (JavaScript, JScript) (JSOM) libs: SP.search.js ;

Поиск REST API http://server/_api/search/query

Некоторый демонстрационный код: клиентская объектная модель (CSOM) C#

using (ClientContext clientContext = new ClientContext("http://localhost"))
{
    KeywordQuery keywordQuery = new KeywordQuery(clientContext);
    keywordQuery.QueryText = "*";
    SearchExecutor searchExecutor = new SearchExecutor(clientContext);
    ClientResult<ResultTableCollection> results = 
        searchExecutor.ExecuteQuery(keywordQuery);
    clientContext.ExecuteQuery();
}

Объектная модель JavaScript (JSOM)

var keywordQuery = new
Microsoft.SharePoint.Client.Search.Query.KeywordQuery(context);
keywordQuery.set_queryText('SharePoint');
var searchExecutor = new Microsoft.SharePoint.Client.Search.Query.SearchExecutor(context);
results = searchExecutor.executeQuery(keywordQuery);
context.executeQueryAsync(onQuerySuccess, onQueryFail);

REST HTTP GET запросить HTML

http://mylocalhost/_api/search/query?querytext='SharePoint'

HTTP POST запрос HTML

{
'__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},
'Querytext' : 'SharePoint'
}

Затем установите разрешения для VisualStudio и инструментов разработки Office 365 "Напа"

Дополнительную информацию о поиске можно добавить в: https://docs.microsoft.com/en-us/sharepoint/dev/general-development/search-add-ins-in-sharepoint