Я пытаюсь получить токен из Azure AD из приложения Xamarin Form. Я использую ADAL 4+ и не хочу, чтобы пользователь входил в систему каждый раз при запуске приложения. Есть ли способ программно обновить или получить токен при перезапуске приложения после того, как пользователь уже успешно вошел в систему.
Из-за ADAL больше нет userPasswordCredientian(). Я не мог найти никаких альтернативных решений для этого.
Как только 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.
Спасибо за помощь Дженни. Я проверю это и дам вам знать.