我正在使用MSAl for Xamarin.Forms并在Xamarin Authorization with Azure AD B2C
上实现了示例在示例中,AcquireTokenSilentAsync()
- 方法是从OnAppearing()
- LoginPage
的方法(视图)调用的(从LoginAsync(true)委派)。登录页面是此示例应用程序的启动页面。
我的问题是,我是否必须在我的逻辑之前在任何视图(或视图模型)中调用AcquireTokenSilentAsync()
,或者它是否足以在我的启动页面上使用它?如果我必须在任何视图/视图模型上使用它,这似乎是一个方面。你是通过使用一些AOP模式还是在每个视图/视图模型上调用这个方法来解决这个问题的?
答案 0 :(得分: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
}