Я пытаюсь пройти проверку подлинности на узле SharePoint через PHP, чтобы использовать REST API, и у меня странное поведение.
Я использую vgrem библиотека.
Это код, который я использую:
$authCtx = new AuthenticationContext($Settings['Url']);
$authCtx->acquireTokenForUser($Settings['UserName'],$Settings['Password']);
$ctx = new ClientContext($Settings['Url'],$authCtx);
URL имеет следующий формат:
https://sharepointSite.sharepoint.com/sites/SubSiteName/
Я получаю ошибку:
Внешний обмен отключен для
https://sharepointSite.sharepoint.com/
Судя по всему, сам сайт SharePoint не является общим для внешних пользователей, но дочерний сайт есть.
Я могу авторизоваться через браузер и выполнить несколько простых запросов GET.
Сама библиотека автоматически пытается аутентифицироваться на:
https://sharepointSite.sharepoint.com/_forms/default.aspx?wa=wsignin1.0
Я также попытался изменить саму библиотеку, чтобы найти страницу аутентификации дочернего сайта, но безуспешно. Некоторые примеры того, что я пробовал:
https://sharepointSite.sharepoint.com/sites/SubSiteName/_forms/default.aspx?wa=wsignin1.0
https://sharepointSite.sharepoint.com/sites/_forms/default.aspx?wa=wsignin1.0
В настоящее время я безуспешно пытаюсь воспроизвести аутентификацию, выполненную на самом сайте sharepoint:
https://login.microsoftonline.com/extSTS.srf
(Success)https://sharepointSite.sharepoint.com/{token}/login
(Не удается, печенье отсутствует)https://sharepointSite.sharepoint.com/_forms/default.aspx
(еще не достигнуто)Я добавляю файлы cookie, но, похоже, что-то еще происходит на сервере или отсутствует какое-либо печенье.
Буду признателен, если кто-нибудь окажет какую-либо помощь. Тем временем я буду продолжать пытаться.
PS: я искал большинство ответов на SO, но они либо ссылаются на другую версию Sharepoint и библиотеки, либо устарели (пробовали их, но безуспешно).
РЕДАКТИРОВАТЬ: Шаг 2 не был нужен в конце.
Как кажется, проблема была с самой библиотекой. Я решил проблему, добавив строку
«&Источник = / сайты / SubSiteName /»
на URL. Сама строка стала:
//$subsite = "&Source=https://sharepointSite.sharepoint.com/sites/SubSiteName/"$response = Requests::post($url.$subsite,null,$token, true, false);
внутри функции acquireAuthenticationCookies($token)
, Экстра false
это новая переменная, добавленная для применения параметров curl только к рассматриваемому запросу.
Также мне пришлось немного повозиться с настройками cookie, потому что библиотека автоматически отбрасывала их при перенаправлении. Мне пришлось добавить следующие параметры в запрос:
curl_setopt($ch, CURLOPT_COOKIESESSION, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, "");
РЕДАКТИРОВАТЬ: Забыл положить файл, который я редактировал. Это так же как
PHP-спо / SRC / выполнения / Auth / SamlTokenProvider.php
Других решений пока нет …