«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. Однако счета всегда нулевые.

0 ответов

Другие вопросы по тегам