«GetAccountsAsync» возвращает значение null в моем приложении .NET Maui (C#)
У меня есть приложение .NET Maui, которое должно использовать проверку подлинности MSAL (B2B). Логин с логином и паролем работает. Однако я хочу проверить, хранится ли действительный токен доступа в кеше при запуске приложения. Строка кодаvar accounts = await _application.GetAccountsAsync();
возвращает значение null, поэтому метод никогда не работает. Есть ли у кого-нибудь идеи, почему это ноль? Нужно ли вручную записывать токен в кеш или это делается автоматически? Есть ли у кого-нибудь предложение по альтернативе?
_application.GetAccountsAsync().IsFaulted
является ложным.
Мой код для процесса аутентификации выглядит следующим образом:
private static IPublicClientApplication _application;
private static AuthenticationResult _authenticationResult;
private static void BuildApplication()
{
_application = PublicClientApplicationBuilder.Create(B2BConstants.ClientId)
.WithTenantId(B2BConstants.TenantId)
.WithAuthority(B2BConstants.Authority)
.WithRedirectUri("http://localhost")
.Build();
}
/// <summary>
/// MSAL Authenticate Silent with token cache.
/// </summary>
/// <returns>AccessToken as String</returns>
public static async Task<string> AuthenticateSilentAsync()
{
if (_application == null) BuildApplication();
var accounts = await _application.GetAccountsAsync();
_authenticationResult = await _application.AcquireTokenSilent(B2BConstants.Scopes, accounts.FirstOrDefault())
.ExecuteAsync();
return _authenticationResult.AccessToken;
}
public static async Task<string> AuthenticateAsync(string username, string password)
{
BuildApplication();
_authenticationResult = null;
try
{
return await AuthenticateSilentAsync();
}
catch (MsalUiRequiredException ex)
{
try
{
_authenticationResult = await _application.AcquireTokenByUsernamePassword(B2BConstants.Scopes, username, password)
.WithTenantId(B2BConstants.TenantId)
.ExecuteAsync();
return _authenticationResult.AccessToken;
}
catch (MsalException msalex)
{
return null;
}
}
catch (Exception ex)
{
return null;
}
}
Я уже пытался получить токен, используяGetAccountsAsync
метод, чтобы передать результат вAcquireTokenSilent
. Однако счета всегда нулевые.