Как запросить «Exposed Api» для всех пользовательских календарей в Арендаторе? - PullRequest
0 голосов
/ 09 июля 2019

Я хочу быть в состоянии - с работы крона на 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 вместо сообщения об ошибке. Успешный возврат к запросу. В этом случае список всех пользователей календарей или «успешно обновленных» после изменения календаря.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Получил работу с:

$provider = new \TheNetworg\OAuth2\Client\Provider\Azure([
        'clientId'     => env('OAUTH_APP_ID'),
        'clientSecret' => env('OAUTH_APP_PASSWORD'),
    ]);
    $provider->tenant = env('AZURE_TENANT');
    $provider->urlAPI = "https://graph.microsoft.com/v1.0/";
    $provider->resource = "https://graph.microsoft.com/";
    $token = $provider->getAccessToken('client_credentials', [
        'resource' => 'https://graph.microsoft.com',
    ]);
    $currentCalendarEvents = $provider->get('users/some@some.com/calendars/Calendar/events?$top=1000', $token);

Ресурс $ provider-> и urlapi должны быть установлены до отклонения запроса, как написано в документации: https://github.com/TheNetworg/oauth2-azure#microsoft-graph

0 голосов
/ 09 июля 2019

В Azure AD вы можете указать «Разрешения API» для регистрации приложения.Если вы хотите запросить все календари с одним токеном доступа, вы должны использовать « Права доступа к приложению ».

Точка 4 предназначена для других типов приложений, таких как надстройки Office.

Для всех запросов вы можете использовать конечную точку Графа по умолчанию https://graph.microsoft.com/v1.0/.Поэтому, если вы не хотите запрашивать календарь пользователя, вы должны использовать это:

GET https://graph.microsoft.com/v1.0/<UserId or UPN>/calendar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...