Срок действия токена API Microsoft Graph истекает через 3600 секунд — NodeJS

#node.js #microsoft-graph-api

Вопрос:

Я использую API Microsoft Graph для создания маркера доступа OAuth 2.0, срок действия которого истекает через 1 час. Используемый маршрут: https://login.microsoftonline.com/[Идентификатор арендатора]/oauth2/v2.0/токен Я передаю эти значения в строке запроса. { grant_type: «client_credentials», client_id: APP_ID , client_secret: APP_PASSWORD , область действия: «https://graph.microsoft.com/.default», }

Теперь моя текущая реализация Я добавил рекурсию, в которой я добавил повторные попытки перед вызовом api graph для извлечения сведений о пользователе из AD.

Есть ли способ получить/получить токен обновления, потому что токены обновления длятся дольше?

Ответ №1:

Вам необходимо выполнить следующие действия, чтобы включить токены обновления:

  1. Запросите область «offline_access». Это сообщит конечной точке о необходимости предоставить ключ обновления вместе с ключом доступа и связанными метаданными.
  2. Вам нужно запросить новый access_token (и refresh_token по мере их объединения), повторив одну и ту же ЗАПИСЬ в /common/oauth2/v2.0/токен с немного другим телом — для типа grant_type установлено значение refresh_token, и вместо кода вы указываете свойство и значение refresh_token

Например, для

 POST /{tenant}/oauth2/v2.0/token
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=[client Id]
amp;scope=[scope]
amp;refresh_token=[refresh token]
amp;grant_type=refresh_token
amp;client_secret=[secret]
 

Пожалуйста, обратитесь к документации здесь для получения подробной информации о запросе токена обновления.

Комментарии:

1. Я не использую конечную точку авторизации, поэтому не получаю uri перенаправления и код, который передается в api /common/oauth2/v2.0/token. Я использую тип гранта в качестве учетных данных клиента, и если я заменю его на «offline_access», как вы сказали. Я получаю это в ответе: приложение запросило неподдерживаемый тип гранта ‘offline_access’

Ответ №2:

На мой взгляд, использование токена обновления вместе с потоком данных клиента бесполезно. Зачем вам добавлять дополнительный шаг для получения токена доступа, если вы можете получить его сразу?

Поток с типом предоставления client_credentials:

Шаг 1: аутентификация клиента

Маркер доступа OK выдан

Расход для получения маркер обновления

Шаг 1: аутентификация клиента

Шаг 2: Обновите проверку токена и используйте ее для получения токена доступа

Маркер доступа OK выдан.