Вы можете получить токен в автоматическом режиме только в том случае, если для этого пользователя уже есть кэшированный токен, который включает в себя запрашиваемые области (может иметь больше, но должен иметь по крайней мере то, о чем вы просили).
Именно поэтому AcquireTokenSilentAsync
всегда следует заключать в блок Try / Catch.Если не удается найти соответствующий токен, необходимо запустить интерактивный поток.Вот пример из MSAL Wiki :
AuthenticationResult result = null;
try
{
result = await app.AcquireTokenSilentAsync(scopes, app.Users.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
}