Как правильно подключить вторую «статическую» учетную запись Azure Office365 без входа в систему (учетные данные уже указаны)? - PullRequest
0 голосов
/ 10 апреля 2019

Я работаю в очень крупной компании с 5000+ сотрудниками.Из-за этого у нас есть лицензии на Azure, и все электронные письма и серверы работают на их платформе.Я создал приложение для нашего внутреннего бизнеса (интранет).Это приложение использует единый вход для входа в систему наших пользователей и блокировки внешних пользователей, которых нет в нашем клиенте.Правление пришло ко мне с вопросом, можем ли мы использовать одну глобальную учетную запись электронной почты для управления всеми событиями и объявлениями компании через календарь.Я искал какое-то время (3 недели) и не смог найти ничего, что связано с тем, что я собираюсь сделать (в PHP).

Мне нужно соединение с графиком Microsoft через php, который автоматически регистрирует 'статически задан адрес электронной почты и выплевывает все события календаря между 2 датами.На графике Microsoft 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);

Вышеприведенное возвращает токен на предъявителя, срок действия которого истек 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>"}

Я ожидаю, что предъявительтокен, который должен быть действителен не менее 2 часов, но срок его действия истек 2 часа назад вместо этого.

Почему истек срок действия этого токена и как я могу использовать протокол «renew» / «JWT» в php для расширениясрок его использования до 1 месяца и более?

Имейте в виду, что эта учетная запись никем не будет авторизована.Это должно произойти автоматически.(учетные данные были (надежно) сохранены в среде администратора интрасети).

И как получить все события календаря между двумя датами для учетных записей Azure?URL-адрес ниже также описан для «общедоступных адресов электронной почты.

https://docs.microsoft.com/en-us/graph/api/calendar-list-calendarview?view=graph-rest-1.0

1 Ответ

0 голосов
/ 16 апреля 2019

Чтобы определить время жизни токена, можно использовать значения параметра expires_in или expires_on, для документации :

  • expires_in Срок действия токена доступа (в секундах)
  • expires_on Время истечения срока действия токена доступа. Дата представляется в виде количества секунд от 1970-01-01T0:0:0Z UTC до истечения срока действия. Это значение используется для определения времени жизни кэшированных токенов.

В вашем примере ответ от конечной точки /token говорит о том, что срок действия токена истечет через 3599 секунд или при 2019-04-10 07:55:04 ( в UTC по схеме )

Чтобы получить локальное время истечения, установите DateTime::setTimezone ( Список поддерживаемых часовых поясов ), как показано ниже:

$expiredOn = DateTime::createFromFormat( 'U', $token->expires_on, new DateTimeZone('UTC'));
$expiredOn->setTimeZone(new DateTimeZone('Europe/Helsinki'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...