Как только ADAL.NET получил токен для пользователя, он кэширует его вместе с токеном обновления. Затем в следующий раз, когда приложение захочет получить токен, оно должно сначала вызвать AcquireTokenSilentAsync
, чтобы проверить, находится ли приемлемый токен в кэше. Если токен существует, но срок его действия истек, AcquireTokenSilentAsync
будет использовать кэшированный токен обновления для обновления токена доступа, а если токена нет в кэше, то для повторного входа пользователя может потребоваться интерактивный вызов. .
Вот еще немного информации о том, как это работает в ADAL
Это рекомендуемый шаблон вызова, сначала выполните AT-вызов без вывода сообщений и перехватите исключение AdalSilentTokenAcquisitionException (поскольку токен не был найден), затем выполните интерактивный вызов AT.
AuthenticationContext ac = new AuthenticationContext(authority);
AuthenticationResult result=null;
try
{
result = await ac.AcquireTokenSilentAsync(resource, clientId);
}
catch (AdalException adalException)
{
if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently
|| adalException.ErrorCode == AdalError.InteractionRequired)
{
result = await ac.AcquireTokenAsync(resource, clientId, redirectUri,
new PlatformParameters(PromptBehavior.Auto));
}
}
Я бы порекомендовал перейти на MSAL ... вот документация о различиях между ADAL и MSAL и специфика для потока имени пользователя / пароля в MSAL и как перейти с ADAL.NET 4.x для MSAL.NET 2.x и только что выпущенный MSAL v3 api .