Я хочу быть в состоянии - с работы крона на 3-й. сервер вечеринок - запрашивайте и изменяйте всех пользователей в моих календарях Арендаторов (организации) - но я просто получаю «URI идентификатора приложения», с которым я не знаю, что делать.
Независимо от того, как я запрашиваю API графа Microsoft, я получаю «Недопустимую аудиторию», и документы по теме на самом деле не показывают, как именно указать правильную «аудиторию» или что на самом деле влечет за собой «ресурс».
Вот шаги, которые я предпринял на портале Azure Active Directory:
Я использую поток предоставления клиентских учетных данных, чтобы получить доступ с помощью Cron, а не через пользователя. https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow
1) Зарегистрировано приложение на портале. Так что я получаю некоторые идентификаторы (здесь анонимно)
Application (client) ID
:
51ed7b6d-d33e-491e
Directory (tenant) ID
:
c181f4f3-912b-4acf-
Object ID
:
3f52a799-f2ab-4161-a81c
2) Создан секрет, чтобы я мог предоставить его вместе с идентификатором приложения для получения токена.
3) Дано "Разрешения приложений Api" для https://graph.microsoft.com/Calendars.ReadWrite.
4) «Выставил Api» и назвал его область «календари чтения», поэтому URI идентификатора приложения с областью действия выглядит так: api: // 51ed7b6d-d33e-491e-9d40-1 / readwritecalendars
5) Авторизовал API для приложения с идентификатором приложения (клиента), начиная с шага 1, поэтому мне не нужно согласие администратора на запрос.
Проблема теперь в том, что я просто получаю «URI идентификатора приложения», хорошо, как мне тогда точно запросить у меня календари?
Я использую https://github.com/TheNetworg/oauth2-azure здесь:
Я могу успешно получить токен:
$provider = new \TheNetworg\OAuth2\Client\Provider\Azure([
'clientId' => env('OAUTH_APP_ID'),
'clientSecret' => env('OAUTH_APP_PASSWORD'),
'redirectUri' => 'http://www.google.dk'
]);
$provider->tenant = 'secret';
$token = $provider->getAccessToken('client_credentials', [
'resource' => 'https://graph.windows.net',
]);
$provider->urlAPI = "https://graph.microsoft.com/v1.0/";
$provider->resource = "https://graph.microsoft.com/";
return $token ;
Дает мне:
{
"token_type": "Bearer",
"ext_expires_in": "3600",
"expires_on": "1562669834",
"not_before": "1562665934",
"resource": "https://graph.windows.net/",
"access_token": "longstringofnumbers",
"expires": 1562269224
}
Не возвращено поле «Аудит» или «Аудитория».
Это где я запутался, как именно я формирую ссылку, как мне сказать, что я хочу запросить все календари с токеном?
В документации по графу Outlook указано, что мне нужно сделать запрос (https://docs.microsoft.com/en-us/graph/api/user-list-calendars?view=graph-rest-1.0&tabs=http):
).
GET /me/calendars
Это на самом деле не имеет смысла для меня, так как "я" подразумевает пользователя, я пытаюсь запросить материал у арендатора, не привязанного к определенному пользователю?
В любом случае, если я попытаюсь сделать запрос вроде:
$provider->get('me/calendars',$token);
Или разные комбинации этого я просто получаю:
Access token validation failure. Invalid audience.
Подводя итоги: как я могу на самом деле запросить у API списки / изменения календарей, какую конечную точку я должен достичь? И где я могу поставить фактический запрос?
Заранее спасибо!
Результатом будет объект JSON вместо сообщения об ошибке. Успешный возврат к запросу. В этом случае список всех пользователей календарей или «успешно обновленных» после изменения календаря.