何时使用MSAL AcquireTokenSilentAsync

时间:2017-12-10 13:50:25

标签: azure xamarin.forms msal

我正在使用MSAl for Xamarin.Forms并在Xamarin Authorization with Azure AD B2C

上实现了示例

在示例中,AcquireTokenSilentAsync() - 方法是从OnAppearing() - LoginPage的方法(视图)调用的(从LoginAsync(true)委派)。登录页面是此示例应用程序的启动页面。

我的问题是,我是否必须在我的逻辑之前在任何视图(或视图模型)中调用AcquireTokenSilentAsync(),或者它是否足以在我的启动页面上使用它?如果我必须在任何视图/视图模型上使用它,这似乎是一个方面。你是通过使用一些AOP模式还是在每个视图/视图模型上调用这个方法来解决这个问题的?

1 个答案:

答案 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
}