ADAL получить токен с именем пользователя и паролем - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь получить токен от Azure AD из приложения Xamarin Form. Я использую ADAL 4+ и не хочу, чтобы пользователь входил каждый раз при запуске приложения. Есть ли способ обновить или получить токен программным способом, когда приложение перезапустится после того, как пользователь уже успешно войдет в систему.

Из-за ADAL больше нет userPasswordCredientian (). Я не смог найти альтернативных решений для этого.

1 Ответ

1 голос
/ 10 апреля 2019

Как только 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 .

...