Как обновить токен для Microsoft Graph - PullRequest
0 голосов
/ 03 июля 2018

Я подключаюсь к Microsoft Graph, используя:

public GraphServiceClient GetAuthenticatedClient(string token)
{
    GraphServiceClient graphClient = new GraphServiceClient(
        new DelegateAuthenticationProvider(
            async (requestMessage) =>
            {
                // Append the access token to the request.
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
            }));
    return graphClient;
}

Я запускаю этот код на сервере. Используемый мной токен отправляется мне внешним приложением.

Все отлично работает в течение первого часа, затем токен истекает.

У меня вопрос : Как я могу получить новый токен, поскольку у меня также есть доступ к токену обновления?

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Правильный способ создать это - иметь внешнее приложение, которое предоставит вам токен доступа, чтобы периодически отправлять вам новый токен с истекшим сроком доступа. Вы должны быть в состоянии использовать этот токен доступа для выполнения необходимых действий с Microsoft Graph. Если внешнее клиентское приложение отправляет запросы на обслуживание, оно должно вставлять действительный токен доступа с истекшим сроком действия в каждый запрос, который вы можете использовать.

Токен обновления не предназначен для передачи другим приложениям. Это открывает уязвимость системы безопасности. В идеале ваше внешнее приложение должно прекратить отправку через токен обновления.

Другим вариантом будет добавление вашего приложения как зарегистрированного клиента в Microsoft Graph, а затем аутентификация в нем напрямую. Затем вы можете обменять свой собственный токен обновления, чтобы получать новые токены по истечении срока их действия.

0 голосов
/ 17 марта 2019

Есть способ сделать это, но он рекомендуется только для сценариев миграции ADAL.NET 2.x в MSAL.NET 2.x, которые описаны здесь: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Adal-to-Msal

Только для учетных данных клиента (не код авторизации).

0 голосов
/ 03 июля 2018

Для включения маркеров обновления требуется две части:

  1. Вам необходимо запросить объем offline_access. Это говорит конечной точке предоставить refresh_token вместе с access_token и соответствующими метаданными.

  2. Вам необходимо запросить новый access_tokenrefresh_token, когда они собираются вместе), повторив те же самые POST до /common/oauth2/v2.0/token с немного другим телом - grant_type установлен в refresh_token и вместо code вы указываете refresh_token свойство и значение:

    https://login.microsoftonline.com/common/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=refresh_token&
    refresh_token=[REFRESH TOKEN]&
    client_id=[APPLICATION ID]&
    client_secret=[PASSWORD]&
    scope=[SCOPE]&
    redirect_uri=[REDIRECT URI]
    

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...