何时使用 MSAL AcquireTokenSilentAsync

When to use MSAL AcquireTokenSilentAsync

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

上实现了示例

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

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

我现在在启动时调用 AquireTokenSilentAsync 一次。

他们现在对如何使用它有了很好的解释: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/AcquireTokenSilentAsync-using-a-cached-token

Recommended call pattern in public client applications with 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
}