Я хочу получить токен доступа, чтобы использовать его для извлечения электронной почты из Outlook, используя Microsoft Graph API.Моим приложением будет консольное приложение c #, которое будет запускаться автоматически через каждые 20 минут и получать электронную почту.
Я новичок в c #, а также в Microsoft Graph, это моя первая задача, связанная с этими технологиями.
Проблема:
Когда я попытался получить токен с помощью client_Credentials, я смог это сделать, но теперь, когда срок действия этого токена истек, я хочу получить новый токен, и если я пытаюсь сгенерировать новый токенон возвращает только просроченный.
Соответствующий код:
result = await context.AcquireTokenAsync(resourceUri, clientCredential);
Использование метода AcquireTokenSilentAsync возвращает как ошибку: "Не удалось получить токен в автоматическом режиме, так как токен не был найден в кэше. Вызовите методAcquireToken. "
Соответствующий код:
result = await authContext.AcquireTokenSilentAsync(resourceUri, clientId);
Мои вопросы:
Является ли доступ к токену с использованием учетных данных клиента правильным способом удовлетворения моих потребностей?
Я прочитал, что с помощью client_Credentials нам не нужен refresh_token, каждый раз, когда мы пытаемся подключиться, мы получаем новый токен.
Как получать новый токен каждый раз, когда я хочу подключиться?
Любые дополнительные предложения о том, как подойти к моей основной цели, которые не были заданы в вопросе,Будем очень рады.
Я прилагаю мой пример кода:
static async Task getAccessToken()
{
authContext = new AuthenticationContext("https://login.microsoftonline.com/<tenantId>");
try
{
result = await authContext.AcquireTokenSilentAsync(resourceUri, clientId);
}
catch (Exception ex)
{
Console.WriteLine(ex);
try
{
result = await authContext.AcquireTokenAsync(resourceUri, clientCredential);
Console.WriteLine("" + result.AccessToken+"\n\n");
}
catch (Exception e)
{
Console.WriteLine("\n AcquireTokenAsync failed\n");
Console.WriteLine(""+e);
}
}
if (result == null)
{
Console.WriteLine("Canceling attempt to get access token.\n");
return;
}
Console.WriteLine(result.AccessToken);
}