Компания, в которой я работаю, очень крупная, в ней работает более 5000 человек. Поэтому у нас есть лицензии на Azure, и все наши электронные письма и серверы работают на их платформе. Я создал приложение для нашего внутреннего бизнеса (интранет). Это приложение использует SSO для входа в систему наших пользователей и блокировки внешних пользователей, которые не входят в наш клиент. Правление обратилось ко мне с вопросом, можем ли мы использовать одну глобальную учетную запись электронной почты для управления всеми событиями компании и объявлениями через календарь. Я искал некоторое время (3 недели) и не смог найти ничего, связанного с тем, что я собираюсь сделать (на PHP).
Мне нужно соединение с Microsoft Graph через php, которое автоматически регистрирует «статически» заданный адрес электронной почты и выдает все события календаря между двумя датами. Microsoft Graph API полон предварительных версий этого, но все они написаны для «общедоступных» адресов электронной почты, а не для более безопасных адресов Azure.
У меня установлено соединение с токеном Bearer, но по умолчанию оно возвращается с истекшим сроком действия.
Что у меня есть до сих пор:
$tenantAppUrl = "https://login.microsoftonline.com/“.$tenantid;
$tenantHostUrl = "login.microsoftonline.com”;
$requesturl = "https://login.microsoftonline.com/“.$tenantid."/oauth2/token?api-version=1.6”;
$post_params = array(
"client_id" => $clientid,
"client_secret" => $clientsecret,
"resource" => "https://graph.windows.net/",
"grant_type" => "client_credentials"
);
$headers = array(
"POST: " . $tenantAppUrl . " HTTP/1.1",
"Content-Type: application/x-www-form-urlencoded",
"Host: " . $tenantHostUrl,
"cache-control: no-cache",
'Content-Length: ' . strlen(json_encode($post_params))
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $fullurl);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_params);
$response = json_decode(curl_exec($curl), false);
curl_close($curl);
Приведенное выше возвращает токен Bearer, срок действия которого истек 2 часа назад.
HTTP/1.1 100 Continue HTTP/1.1 200 OK Cache-Control: no-cache, no-store Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff x-ms-request-id: 2f26979b-c336-44a3-a9c9-d4d785758c00 P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" Set-Cookie: fpc=AsIZpMH6undMozQVDrbmPxTWEVd_AQAAAEeKP9QOAAAA; expires=Fri, 10-May-2019 06:55:04 GMT; path=/; secure; HttpOnly Set-Cookie: x-ms-gateway-slice=prod; path=/; secure; HttpOnly Set-Cookie: stsservicecookie=ests; path=/; secure; HttpOnly Date: Wed, 10 Apr 2019 06:55:03 GMT Content-Length: 1448
{"token_type":"Bearer","expires_in":"3599","ext_expires_in":"3599","expires_on":"1554882904","not_before":"1554879004","resource":"https://graph.windows.net/","access_token”:”<thetoken>"}
Я ожидаю, что токен Bearer должен быть действителен не менее 2 часов, но вместо этого он возвращает срок действия 2 часа назад.
Почему срок действия этого токена истек и как мне использовать протокол «обновить»/«JWT» в php, чтобы продлить срок его использования до 1 месяца или более?
Имейте в виду, что в эту учетную запись никто не войдет. Это должно происходить автоматически. (учетные данные были (безопасно) сохранены в среде администрирования интрасети).
И как получить все события календаря между двумя датами для учетных записей Azure? Приведенный ниже URL-адрес также описан для «общедоступных адресов электронной почты».
https://docs.microsoft.com/en-us/graph/api/calendar-list-calendarview?view=graph-rest-1.0