Использует ли AcquireTokenForClient (MSAL) кэш токенов?

#c# #msal

#c# #msal

Вопрос:

Я (успешно) использую поток учетных данных клиента с MSAL для аутентификации такого приложения:

 private static async Task<AuthenticationResult> getAuthResultNonInteractively()
{
    string[] scopes = {"api://xxx/.default"};

    IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.CreateWithApplicationOptions(
            new ConfidentialClientApplicationOptions
            {
                TenantId = "xxx",
                ClientId = "xxx",
                RedirectUri = "http://localhost",
                ClientSecret = "xxx"
            })
        .Build();
    
    // Desired behaviour: acquires token online only if token does not 
    // exist in cache or is expired
    AuthenticationResult authResult = await app.AcquireTokenForClient(scopes)
        .ExecuteAsync();

    return authResu<
}
 

Выполняет ли вызов AcquireTokenForClient первую попытку найти токен в кэше токенов и получает его онлайн, только если токен еще не существует в кэше или срок действия токена истек? Или он всегда получает токен онлайн? Если последнее верно, что мне нужно изменить, чтобы получить желаемое поведение?

Ответ №1:

AppTokenCache Используемый AcquireTokenForClient связан с вашим конкретным экземпляром IConfidentialClientApplication , поэтому, чтобы воспользоваться преимуществами кэширования токенов, ваш IConfidentialClientApplication должен быть долговечным (т. Е. Одноэлементным).