Когда использовать MSAL AcquireTokenSilentAsync

Я использую MSAl для Xamarin.Forms и реализовал пример на Авторизация Xamarin с Azure Реклама B2C

В примере AcquireTokenSilentAsync()-метод вызывается из OnAppearing()-метода LoginPage (представления) (делегированного из LoginAsync(true)). Страница входа — это начальная страница этого примера приложения.

Мой вопрос: нужно ли мне вызывать AcquireTokenSilentAsync() в любом представлении (или модели представления) перед моей логикой или достаточно использовать его на моей стартовой странице? Если мне нужно использовать его в любой модели представления/представления, кажется, что это своего рода аспект. Вы решаете это, используя какой-либо шаблон АОП или действительно вызывая этот метод для каждой модели представления/представления?


person Creepin    schedule 10.12.2017    source источник


Ответы (1)


Теперь я вызываю AquireTokenSilentAsync один раз при запуске.

Теперь у них есть отличное объяснение, как его использовать: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/AcquireTokenSilentAsync-using-a-cached-token

Рекомендуемый шаблон вызова в общедоступных клиентских приложениях с Msal 2.x

AuthenticationResult result = null;
var accounts = await app.GetAccountsAsync();

try
{
 result = await app.AcquireTokenSilentAsync(scopes, accounts.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
 {
    result = await app.AcquireTokenAsync(scopes);
 }
 catch (MsalException msalex)
 {
    ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
 }
}
catch (Exception ex)
{
 ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
 return;
}

if (result != null)
{
 string accessToken = result.AccessToken;
 // Use the token
}
person Creepin    schedule 12.09.2018
comment
Извините @Creepin, но я все еще немного запутался, даже после прочтения ссылки ... вы имеете в виду, что вы вызываете это в app.cs приложения (в методе «защищенное переопределение void OnStart ()»? Или в Метод OnAppearing() для каждой CS-страницы MVVM? У меня точно такая же проблема, и я продолжаю отказываться от аутентификации, когда перехожу на страницу содержимого с привязками, поступающими из модели представления. Вплоть до этого момента я остаюсь в системе! - person Mark; 11.01.2019
comment
Я зарегистрировал свой LoginService с контейнером IoC как singleton. При запуске приложения я перехожу на промежуточную страницу, которая использует LoginService для автоматического входа в систему. Если это удается, я перехожу на страницу для зарегистрированных пользователей, иначе на страницу входа. Так что в основном я делаю это OnStart(). Я не думаю, что вам нужно снова делать это в OnAppearing(). Насколько я понял, когда приложение уходит в сон и возвращается с возобновлением, то состояние памяти сохраняется, а соединения могут быть разорваны. Когда приложение действительно завершается, снова вызывается OnStart(). - person Creepin; 18.01.2019
comment
Фантастика. Спасибо за это. Застрял на этом в течение долгого времени. Документы MSFT либо недостаточно ясны, либо я недостаточно умен. Понемногу и то, и другое, наверное. Спасибо еще раз. - person Mark; 18.01.2019