Как получить refen sh токен в MSAL. Net C# - PullRequest
0 голосов
/ 06 апреля 2020

Я определил два подхода для получения токена в MSAL для EWS

  1. Использование подхода с использованием пароля пользователя.
  2. Использование подхода с конфиденциальной информацией Daemon.

В оба выше подошли после того, как я получил токен, я не могу повторно sh его. Хотя я пытался следовать документам MS, но безуспешно. GetAccountsAsyn c () всегда дает пустой результат.

Вот мой код для имени пользователя Подход с использованием пароля

var publicClientApplication = PublicClientApplicationBuilder.Create(ClientId)
                 .WithAuthority(AzureCloudInstance.AzurePublic, TenantId).Build();
var accounts = publicClientApplication.GetAccountsAsync().GetAwaiter().GetResult();
var result = publicClientApplication
                 .AcquireTokenSilent(scopes, accounts.FirstOrDefault())
                 .ExecuteAsync().GetAwaiter().GetResult();

Может кто-нибудь подсказать мне, почему это происходит, или это так? c объясняя этот поток.

1 Ответ

1 голос
/ 07 апреля 2020

MSAL поддерживает кэш токена и кэширует токен после его получения. Он также способен обновлять токен, когда он приближается к истечению срока действия (поскольку кэш также содержит refre sh токен ).

MSAL. NET не предоставляет refre sh токенов по соображениям безопасности: MSAL обрабатывает для вас обновления токенов с помощью кеша токенов.

Когда вы GetAccountsAsync() всегда становитесь пустыми, ваша сериализация Token Cache .

По умолчанию срок действия маркеров доступа истекает через 1 час, и если AAD занят, когда токены По истечении срока действия ваше приложение станет недоступным, поскольку вы не сможете получить действительный токен доступа. Вы можете улучшить доступность своего приложения, регулярно , принудительно ссылаясь на sh. Мы рекомендуем принудительно устанавливать refre sh каждые 30 минут, или половину срока службы AT, если это настраиваемое время жизни.

result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
             .WithForceRefresh(true)
             .ExecuteAsync();
...