几年前,我用jamesiarmes/php-ews用cron脚本导出了所有日历项目。身份验证通过用户名和密码进行。效果很好。
现在,我的公司更改了其策略,并添加了Netscaler交付控制器提供的基于令牌的身份验证。
使用这种结构,我有两个问题:
1)重定向:调用未经身份验证的OWA URL(例如'owa.company.com/owa)会导致重定向到Netscaler登录页面(例如'netscaler.company.com')。认证成功后,将重定向到OWA页面。
针对owa.company.com/owa运行我的脚本会导致
'SOAP client returned status of 302'
我猜/希望,如果身份验证成功,它根本不会重定向。
2)身份验证:php-ews库不支持令牌身份验证。我的希望是进行“一次性”登录,导出登录信息(例如cookie),使用php本机SOAP方法(例如setSoapHeaders,setCurlOptions)进行设置,并让会话/脚本以一种保持活动的方式运行
注入域company.com的所有(肯定是;-))cookie:
$cookies = array(
'NSC_TMAA' => 'some_random_things',
'NSC_TMAS' => 'some_random_things',
'NSC_PERS' => 'some_random_things',
'NSC_TASS' => 'https://owa.company.com/owa/EWS/Exchange.asmx',
'UserContext' => 'some_random_things',
'OutlookSession' => 'some_random_things'
);
foreach($cookies as $cookie_name => $cookie_value) {
$client->__setCookie($cookie_name, $cookie_value);
}
注入头文件(不确定是否是必需的):
$curl_options = array(
CURLOPT_HTTPHEADER => array(
'Connection' => 'keep-alive',
'Referer' => 'https://netscaler.company.com/',
'Upgrade-Insecure-Requests' => '1',
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
'DNT' => '1'
)
);
$client->__setCurlOptions($curl_options);
仍然是SOAP 302错误。
希望你能帮助我。