Пустой кеш токенов MSAL - PullRequest
       99

Пустой кеш токенов MSAL

1 голос
/ 01 августа 2020

У меня есть следующий простой. NET сценарий:

static void Main(string[] args)
{
    var result1 = Login().Result;
    var result2 = Login().Result;
}

public static async Task<AuthenticationResult> Login()
{
    var options = new PublicClientApplicationOptions();
    options.TenantId = "...";
    options.ClientId = "...";

    var app = PublicClientApplicationBuilder.CreateWithApplicationOptions(options)
                    .WithDefaultRedirectUri()
                    .Build();

    AuthenticationResult result;
    var accounts = await app.GetAccountsAsync();
    IAccount account = accounts.FirstOrDefault();
    var scopes = new string[] { "..." };
    try
    {
        result = await app.AcquireTokenSilent(scopes, account).ExecuteAsync();
    }
    catch (MsalUiRequiredException)
    {
        result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
    }
    return result;
}

Я ожидал, что первый вызов Login (...) выполнит интерактивную аутентификацию, а затем второй вызов var accounts = await app.GetAccountsAsyn c () возвращает ранее зарегистрированную учетную запись. Однако на счетах нет ни одной позиции. Итак, похоже, что кеш токенов не является частью этих вызовов.

Есть ли способ сохранить зарегистрированную учетную запись при первом вызове? Не должно быть автомата c?

1 Ответ

1 голос
/ 03 августа 2020

У меня была такая же проблема, и после изучения библиотеки MSAL с помощью ilspy я обнаружил, что кеш хранится в приложении IPublicClientApplication.

Итак, если вы повторно используете app, вы будете также получить преимущество кеш-памяти.

...