Получите доступ к SharePoint Rest API через Java-клиент, но получите ошибку 403

Я пытаюсь получить доступ к SP Rest API, как указано здесь, но все равно получаю ошибку 403 - Forbidden. Я не уверен, что это как-то связано с единым входом, который мы используем: чтобы получить доступ к Rest Api через браузер, мне нужно войти в https://login.microsoftonline.com, а затем я могу вызвать https://mycompany.sharepoint.com/_api/search/query?querytext=%27Search%20foo%20bar%27 Итак, мое Java-приложение выглядит так:

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
            new AuthScope(AuthScope.ANY),
            new NTCredentials("[email protected]", "password", "https://login.microsoftonline.com", "microsoftonline.com"));
    CloseableHttpClient httpclient = HttpClients.custom()
            .setDefaultCredentialsProvider(credsProvider)
            .build();
    try {
        HttpGet httpget = new HttpGet("https://mycompany.sharepoint.com/_api/search/query?querytext=%27Search%20foo%20bar%27");

        System.out.println("Executing request " + httpget.getRequestLine());
        CloseableHttpResponse response = httpclient.execute(httpget);
        try {
            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            EntityUtils.consume(response.getEntity());
        } finally {
            response.close();
        }
    } finally {
        httpclient.close();
    }

Что приводит к HTTP/1.1 403 FORBIDDEN. Любые идеи?

РЕДАКТИРОВАТЬ: я добавил print.out всех заголовков, поэтому мой полный вывод:

Executing request GET https://***.sharepoint.com/_api/search/query?querytext=%27Search%20foo%20OR%20bar%27 HTTP/1.1
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
----------------------------------------
HTTP/1.1 403 Forbidden
Cache-Control: private, max-age=0
Transfer-Encoding: chunked
Content-Type: application/xml;charset=utf-8
Expires: Mon, 15 Jun 2015 07:12:48 GMT
Last-Modified: Tue, 30 Jun 2015 07:12:48 GMT
Server: Microsoft-IIS/8.5
X-SharePointHealthScore: 0
X-Forms_Based_Auth_Required: https://***.sharepoint.com/_forms/default.aspx?ReturnUrl=/_layouts/15/error.aspx&Source=%2f_vti_bin%2fclient.svc%2fsearch%2fquery%3fquerytext%3d%2527Search%2520foo%2520OR%2520bar%2527
X-Forms_Based_Auth_Return_Url: https://***.sharepoint.com/_layouts/15/error.aspx
X-MSDAVEXT_Error: 917656; Zugriff+verweigert.+Zum+%c3%96ffnen+von+Dateien+an+diesem+Speicherort+m%c3%bcssen+Sie+zun%c3%a4chst+zur+Website+wechseln+und+die+Option+zur+automatischen+Anmeldung+aktivieren.
DATASERVICEVERSION: 3.0
X-AspNet-Version: 4.0.30319
X-IDCRL_AUTH_PARAMS_V1: IDCRL Type="BPOSIDCRL", EndPoint="/_vti_bin/idcrl.svc/", RootDomain="sharepoint.com", Policy="MBI"
SPRequestGuid: c757159d-a063-2000-20ed-499660c844ff
request-id: c757159d-a063-2000-20ed-499660c844ff
X-FRAME-OPTIONS: SAMEORIGIN
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 16.0.0.4121
X-Content-Type-Options: nosniff
X-MS-InvokeApp: 1; RequireReadOnly
P3P: CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"
Date: Tue, 30 Jun 2015 07:12:47 GMT

Я пытаюсь перевести X-MSDAVEXT_Error на английский: Permission denied. To access data from this location you have to switch to the website and enable the option for automatic login.


person Munchkin    schedule 29.06.2015    source источник
comment
Какое сообщение вы получаете из ответа 403? Что-нибудь о проверке безопасности?   -  person Daniel B    schedule 29.06.2015
comment
@Daniel B, посмотри мое редактирование   -  person Munchkin    schedule 30.06.2015


Ответы (1)


Похоже, вы используете Office 365. Я видел эту проблему при попытке использовать некоторые учетные записи. Я бы посмотрел на библиотеки ADAL для выполнения аутентификации в Azure AD (которые у вас есть как часть O365) https://github.com/AzureAD/azure-activedirectory-library-for-java

person GavinB    schedule 30.06.2015
comment
Да, я использую O365. Спасибо за упоминание ADAL, но я действительно не понимаю, как использовать пример аутентификации (думаю, это этот пример) с моим запросом HttpGet. Может кто-нибудь объяснит? - person Munchkin; 03.07.2015