我尝试通过PHP在SharePoint子网站上进行身份验证,以便使用REST API,并且我得到了一些奇怪的行为。
我正在使用vgrem库。
这是我正在使用的代码:
$authCtx = new AuthenticationContext($Settings['Url']);
$authCtx->acquireTokenForUser($Settings['UserName'],$Settings['Password']);
$ctx = new ClientContext($Settings['Url'],$authCtx);
网址格式如下:
https://sharepointSite.sharepoint.com/sites/SubSiteName/
我得到的错误是:
禁用外部共享
https://sharepointSite.sharepoint.com/
从外观上看,SharePoint网站本身不是外部共享的,但子网站是。
我可以通过浏览器进行身份验证并执行一些简单的GET查询。
库本身会自动尝试在以下位置进行身份验证:
https://sharepointSite.sharepoint.com/_forms/default.aspx?wa=wsignin1.0
我还尝试更改库本身,以便找到子网站auth页面但没有成功。我试过的一些例子:
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
(成功)https://sharepointSite.sharepoint.com/{token}/login
(失败,缺少cookie)https://sharepointSite.sharepoint.com/_forms/default.aspx
(尚未到达)我添加了Cookie,但似乎后端发生了其他事情,或者某些Cookie丢失了。
如果有人提供任何帮助,我将不胜感激。与此同时,我将继续努力。
PS:我已经在SO上搜索了大部分答案,但他们要么提到不同版本的Sharepoint和库,要么已过时(尝试过它们,但没有成功)。编辑:最后不需要第2步。
答案 0 :(得分:0)
因为看起来问题出在图书馆本身。我通过添加字符串
解决了这个问题"&安培;源= /位点/ SubSiteName /"
到网址。这条线本身变成了:
//$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-SPO / SRC /运行时间/认证/ SamlTokenProvider.php