因此,我最近将新的Office365 Rest API与PHP集成,并使其与Contacts API一起成功运行。
系统将生成请求URL并在身份验证完成后重定向用户,这非常正常,但如果您返回脚本,它将自动重新登录该过程,因为Office365不会强制重新授权。
我们的脚本目前允许多个用户将其帐户与我们的系统同步,但这只允许一个用户在每个浏览器会话中执行此操作。
require_once('./src/Office365_Client.php');
$client = new Office365_Client();
$forward_url = $client->createAuthUrl();
if (isset($_GET['code'])) {
$code = $_GET['code'];
$client->setCode($code);
$responseObj = $client->getTokens();
$access_token = $client->getAccessToken();
$refresh_token = $client->getRefreshToken();
$_SESSION['access_token'] = $access_token;
$_SESSION['instance_url'] = $instance_url;
$icustomer = (isset($_SESSION['icustomer'])) ? $_SESSION['icustomer'] : false;
header("location: " . $_SESSION['redirUrl'] . "?crm=office365&access_token=$access_token&refresh_token=$refresh_token");
//die();
//////////////////////////////////////////////////////////
// LOAD CONTACTS
/////////////////////////////////////////////////////////
//$client->getContactsFolders();
///////////////////////////////////////////////////
} else {
header("location: $forward_url");
}
理想情况下,它应该如下工作:
用户访问我们的网站 - >我们生成Auth URL并将用户重定向到Office365的登录页面(如果之前没有这样做,他们将进行验证) - >完成后,它将返回到我们的选择屏幕,其代码已准备就绪,可以创建其访问令牌。如果用户希望添加其他Office365帐户,则应该可以在不使用其他浏览器的情况下再次执行该过程。
答案 0 :(得分:1)
将prompt=login
添加到授权请求中,以便:
header("location: $forward_url" . "&prompt=login");
答案 1 :(得分:0)
您是否尝试过退出?注销URI为https://login.windows.net/common/oauth2/logout。所以你想做一些像
这样的事情https://login.windows.net/common/oauth2/logout?post_logout_redirect_uri=<some page in your app>