Это мой код для аутентификации для использования Microsoft Graph с Outlook:
public async Task AquireToken()
{
try
{
if (_AuthResult == null)
{
_AuthResult = await Program.PublicClientApp.AcquireTokenSilentAsync(
_scopes, Program.PublicClientApp.Users.FirstOrDefault());
}
}
catch (MsalUiRequiredException ex)
{
// A MsalUiRequiredException happened on AcquireTokenSilentAsync.
// This indicates you need to call AcquireTokenAsync to acquire a token.
System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
try
{
_AuthResult = await Program.PublicClientApp.AcquireTokenAsync(_scopes);
}
catch (MsalException msalex)
{
_ResultsText = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
}
}
catch (Exception ex)
{
_ResultsText = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
}
if (_AuthResult != null)
{
_ResultsText = await GetHttpContentWithToken(_graphAPIEndpoint, _AuthResult.AccessToken);
}
}
Он основан на образцы предоставлены Microsoft. В выводе консоли говорится:
Срок действия токена истекает: 09.04.2017 14:18:06 +01: 00
Этот код отображается из:
$"Token Expires: {_AuthResult.ExpiresOn.ToLocalTime()}" + Environment.NewLine;
Таким образом, это означает, что токен действителен в течение одного часа. Поэтому, если я снова запущу свою утилиту, я ожидаю, что она будет использовать тот же токен, пока не потребуется новый. Но это не так. Он всегда показывает подсказку.
Какой шаг я пропустил?
Исключение
Согласно запросу в комментариях, это детали исключения:
MsalUiRequiredException: в AcquiretokenSilent API был передан нулевой пользователь. Передайте объект пользователя или вызовите аутентификацию acquToken.
Это может помочь
Мне нужно просмотреть предоставленный ответ:
вам необходимо реализовать кеш токенов и использовать AcquireTokenSilentAsync. https://docs.microsoft.com/en-us/outlook/rest/dotnet-tutorial содержит пример веб-приложения.
Program.PublicClientApp.Users.FirstOrDefault()
дает вам нулевого пользователя. - person Ewald   schedule 04.09.2017TokenCache
, и, похоже, мне не хватает этого аспекта. Но это руководство предназначено для приложения ASP.NET, а не для приложения Console. Я изо всех сил пытаюсь понять, как перенести этот учебник в свой контекст. Кроме того, в руководстве создается кеш токенов в сеансе приложения, а не сохраняется его на жесткий диск между экземплярами (насколько я могу судить). - person Andrew Truckle   schedule 04.09.2017