Поэтому недавно я интегрировал новый API Office365 Rest с PHP и успешно работал с 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");
}
В идеале это должно работать следующим образом:
Пользователь посещает наш веб-сайт -> мы генерируем URL-адрес авторизации, и пользователь перенаправляется на страницу входа в Office365 (после чего он выполнит аутентификацию, если ранее это не было сделано) -> после завершения это вернет их обратно на наш экран выбора с готовым кодом для их токена доступа, который будет создан. Если пользователь желает добавить другую учетную запись Office365, он должен снова пройти через этот процесс, не используя другой браузер.
добавлять prompt=login
на запрос авторизации, так:
header("location: $forward_url" . "&prompt=login");
Вы пытались выйти? URI выхода из системы https://login.windows.net/common/oauth2/logout. Так что вы хотели бы сделать что-то вроде
https://login.windows.net/common/oauth2/logout?post_logout_redirect_uri=<some page in your app>